北理工C语言编程网上作业答案.docx

上传人:b****4 文档编号:5320858 上传时间:2023-05-08 格式:DOCX 页数:6 大小:21.45KB
下载 相关 举报
北理工C语言编程网上作业答案.docx_第1页
第1页 / 共6页
北理工C语言编程网上作业答案.docx_第2页
第2页 / 共6页
北理工C语言编程网上作业答案.docx_第3页
第3页 / 共6页
北理工C语言编程网上作业答案.docx_第4页
第4页 / 共6页
北理工C语言编程网上作业答案.docx_第5页
第5页 / 共6页
北理工C语言编程网上作业答案.docx_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

北理工C语言编程网上作业答案.docx

《北理工C语言编程网上作业答案.docx》由会员分享,可在线阅读,更多相关《北理工C语言编程网上作业答案.docx(6页珍藏版)》请在冰点文库上搜索。

北理工C语言编程网上作业答案.docx

北理工C语言编程网上作业答案

北理工C语言编程网上作业答案

        H1:

计算通用产品代码(UPC)的校验位  成绩:

5/折扣:

  背景  许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。

这种被称为通用产品代码的条码可以识别生产商和产品。

超市可以通过扫描产品上的条码来确定支付此项商品的费用。

每一个条码十二位数字构成,通常这些数字会显示在条码下面。

例如,包装为26盎司的Morton牌碘化盐所用条码下的数字是:

024600010030  第一个数字表示商品的种类。

接下来的一组五位数字用来识别生产商。

而第二组五位数字则用来区分产品类型。

最后一位数字是“校验位”,它可以帮助鉴别先前数字中的错误。

如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。

  下面是一种计算校验位的方法:

首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。

然后把第二位、第四位、第六位、第八位和第十位数字相加。

接着把第一次加法结果乘以3后再加上第二次加法的结果。

随后,再把上述结果减去1。

减法后的结果除以10取余数。

最后,用9减去上一步骤中得到的余数。

现在以Morton碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2+6+0+1+0=9。

把第一组加法值乘以3后再加上第二组加法值得到的结果是30。

再减去1,结果变为29。

再把这个值除以10取余数为9。

9在减去余数结果9,最终值为0。

  输入  每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。

  输出  UPC的校验位  提示  本题有隐藏测试用例。

如果想多找不同的实例验证你的算法,可以拿身边书或食品背后的条码测试一下。

  1.#include2.main()3.{  4.inta,b,c;  5.intb1,b2,b3,b4,b5;6.intc1,c2,c3,c4,c5;7.intd1,d2,d3,d4;  8.scanf(\,&a,&b,&c);  9.b1=b/10000,b2=(b/1000)_,b3=(b/100)_,b4=(b/10)_,b5=b_;10.c1=c/10000,c2=(c/1000)_,c3=(c/100)_,c4=(c/10)_,c5=c_;11.d1=a+b2+b4+c1+c3+c5,d2=b1+b3+b5+c2+c4,d3=(3*d1+d2-1)_,d4=9-d3;12.printf(\,d4);13.}    H2:

数制转换  成绩:

5/折扣:

  我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。

  这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。

譬如12和5,在十进制下它们是不等的,但若12使用3进制而5使用六进制或十进制时,它们的值就是相等的。

因此只要选择合适的进制,12和5就可以是相等的。

  程序的输入是两个数字M和N(其十进制的值不超过1000000000),它们的进制在2~36之间。

对于十以下的数字,用0~9表示,而十以上的数字,则使用大写的A~Z表示。

  求出分别在2~36哪种进制下M和N相等。

若相等则输出相应的进制,若不等则输出错误信息。

当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。

信息的格式见测试用例。

  21.零钱换整钱  成绩:

5/折扣:

  小明手中有一堆硬币,小红手中有若干张10元的整钱。

已知1角的硬币厚度为,5角的硬币厚,1元的硬币为。

小明和小红一起玩游戏,小红拿出若干张10元的纸币,小明要将1角的硬币放成一摞,将5角的硬币硬币放成一摞,将1元的硬币放成一摞,如果3摞硬币一样高,并且金额能够正好小红要求的面值,则双方可以进行交换,否则没有办法交换。

输入:

  小红希望交换几张10元的纸币输出:

  1角的数量,5角的数量,1元的数量  1.#include2.main()3.{  4.intn,a,b,c,s,j=0;5.scanf(\,&n);  6.for(a=1;a  7.for(b=1;b*15      22.买东西  成绩:

5/折扣:

  某商品有A、B、C三种品牌,各品牌的价格各不相同,其中A品牌的价格为每个5元,B品牌为每个3元,而C品牌为每3个1元。

如果要用M元钱买N个该商品,要求每个商品至少买一个,编程求各种品牌各能买多少个。

  输入:

  先后输入M及N的实际数值  输出:

  所有可能情况下可以购买的3种商品的个数,按A、B、C品牌的顺序输出,用逗号分隔。

例如:

2,30,68;表示A品牌商品2个、B品牌商品30个、C品牌商品68个。

要求:

因为有多个结果,结果的排序按照A品牌的个数从少到多的顺序输出。

1.#include2.main()3.{  4.inta,b,c,M,N,s;  5.scanf(\,&M,&N);6.for(a=1;a  8.for(b=1;b  23谁能出线  成绩:

10/折扣:

  背景:

  电视台举办“超级学生”才艺大赛,于报名人数狂多,所以要先进行分组预赛。

按规定,每10名学生为一个预赛小组,评委打出分数,各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。

  输入:

  按顺序给出一个小组10个人的最后得分。

  输出:

  能够出线的学生序号。

#includemain()  {inta[10]={0},i,max=0;for(i=0;i  scanf(\if(max  for(i=0;i  24.寻找特殊偶数  成绩:

5/折扣:

  背景  有一种特殊偶数,它每一位上的数字都两两不相同。

我们现在需要找出四位数中某一区间内的这类偶数。

  输入  所要寻找的四位偶数的范围。

每组输入有两个数字:

第一个数字是最小范围;第二个数字是最大范围。

如果输入遇到0,输入结束。

  输出  列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。

  1.#include

  

      2.main()3.{  4.inta,b,counter,i,number1,number2,number3,number4;5.do6.{  7.scanf(\,&a,&b);8.if((a==0)&&(b==0))9.break;10.if(a>=b)printf(\);11.else12.{13.if((a  mber2!

=number3)&&(number2!

=number4)&&(number3!

=number4))23.{24.if((i%2)==0)25.{26.printf(\,i);27.counter++;28.}29.}30.}31.printf(\);32.printf(\,counter);33.}34.}35.}36.while((a!

=0)&&(b!

=0));37.return;38.}    26二年级小学生的题目  成绩:

10/折扣:

  两个二年级小朋友在一起玩游戏,小明给出一堆不超过两位的正整数和运算要求,小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。

  输入:

  用逗号分隔的不超过两位的正整数序列,及其运算符和等号输出:

  最大数op最小数=结果  1.#include2.intmain()3.{  4.intop=0;5.intmax=0;6.intmin=99;7.intmark=0;  8.intn1=-1,n2=-1,n=0;9.for(;1;)10.{11.charc;12.scanf(\,&c);13.if(c==‘,’)14.{15.if(mark==1)16.n=n1;17.elseif(mark==2)18.n=n1*10+n2;19.if(n>max)20.{max=n;}21.if(n  36.op=5;37.elseif(c==‘=‘)38.{break;}39.elseif(c=‘0’)40.{41.if(mark==0)42.{n1=c-’0’;mark=1;}43.elseif(mark==1)44.{n2=c-’0’;mark=2;}45.46.}47.}48.switch(op)49.{50.case1:

51.{52.printf(\,max,min,max+min);53.break;54.}55.case2:

56.{57.printf(\,max,min,max-min);58.break;59.}60.case3:

61.{62.printf(\,max,min,max*min);63.break;64.}65.case4:

66.{67.if(min==0)68.printf(\);69.else70.{71.printf(\,max,min,max/min);72.}73.break;74.}75.case5:

76.{77.if(min==0)78.printf(\);79.else  80.{81.printf(\,max,min,max%min);82.}83.break;84.}85.}86.}  27等值数列段  成绩:

10/折扣:

  如果一个数列中的某一段的各元素值均相同,则称之为等值数列段。

等值数列段中元素的个数叫做等值数列段的长度。

输入:

  N个元素组成的整数数列A的,都退出该游戏,直到只剩下一位小朋友游戏才中止。

  每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。

现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。

  输入:

  小朋友的个数要被练习的数字

  

      输出:

  最终被留下的小朋友的序号  说明:

  如“要被练习的数字”是5,则每次数到5的同学要退出该游戏1.#include2.voidmain()3.{  4.intN,n,i,s=0,a;  5.scanf(\,&N,&n);6.for(i=2;i  9.printf(\,a);10.}  29组成最大数  成绩:

10/折扣:

  任意输入一个自然数,输出该自然数的各位数字组成的最大数。

例如,输入1593,则输出为9531。

输入:

自然数n  输出:

各位数字组成的最大数1.#include2.#include3.intmain()4.{  5.chara[100000],c;6.inti,j,k;  7.scanf(\,&a);8.i=strlen(a);  9.for(j=0;j  16.a[k+1]=c;17.}18.}19.printf(\,a);20.printf(\);21.}  30删除重复字符  成绩:

5/折扣:

  背景:

  输入一个长度不超过100的字符串,删除串中的重复字符。

  输入:

  输入要检查的字符串,长度不超过100个字符。

例如:

abacaeedabcdcd。

  输出:

  删除重复字符后的字符串。

例如:

abced。

  1.#include2.  3.#include4.  5.intalread_saved(charlastchar,charnewstr,intj)6.7.{8.  9.inti=0;10.11.while(i  18.19.}20.21.return0;22.23.}24.25.voidmain()26.27.{28.charstr[100];charnewstr[100];intn,i,j;29.30.i=0;31.32.j=0;33.34.gets(str);35.36.while(str[i]!

=‘\\0’)37.38.{39.40.if(!

alread_saved(str[i],newstr,j))41.{newstr[j]=str[i];j++;42.43.}44.i++;45.46.}47.48.newstr[j]=‘\\0’;49.50.puts(newstr);51.52.}  31合并字符串  成绩:

10/折扣:

  输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。

  输入:

  两个已经排好顺序的两个字符串  输出:

  一个合并在一起的有序的字符串  要求:

  设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。

如果采用先进行串连接,然后再进行排序的算法,则效率太低了。

  1.#include2.  3.#include4.  5.voidMergeList(charstr1,charstr2,charstr3);6.  7.voidmain()8.9.{10.charstr1[100];charstr2[100];charstr3[100];gets(str1);  gets(str2);11.12.MergeList(str1,str2,str3);13.14.printf(\,str3);15.16.}17.18.voidMergeList(charstr1,charstr2,charstr3)19.20.{21.22.inti,j,k;23.24.i=0;j=0;k=0;25.intlengthOfStr1,lengthOfStr2;lengthOfStr1=strlen(str1);  lengthOfStr2=strlen(str2);26.while(i  31.}32.while(i  while(j  32串的减法  成绩:

10/折扣:

  输入字符串s和t,将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。

  例如:

当s=\,t=\时,u=\。

输入:

  第一行为串s第二行为串t输出:

串u  1.#include2.#include3.intmain()4.{  5.chara[80];6.charb[80];7.gets(a);8.gets(b);9.10.intl=strlen(a);11.12.for(inti=0;b[i]!

=‘\\0’;i++)13.{14.for(intj=0;j  21.for(i=1;i  37大数分解  成绩:

5/折扣:

  2007级在“计算机科学导论”的期末考试中有一道试题。

下面请你看看那题目应该如何编写。

从键盘输入的一个大于1的整数,通过算法将该整数分解为若干因子的乘积。

  输入:

  一个正整数。

  输出:

  分解后的各个因子。

1.2.3.4.5.6.7.8.  #includevoidmain(){intn,i;  scanf(\,&n);for(i=2;n>1;){if(n%i==0){  printf(\,i);n/=i;}  9.elsei++;10.}11.}  38回文字符串——递归  成绩:

5/折扣:

  有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。

例如LeveL就是一个回文字符串。

输入:

字符串输出:

  Yes或者No  说明:

  如输出Yes,说明输入的字符串是一个回文字符串输出No,说明输入的字符串不是一个回文字符串请使用递归算法实现。

  1.#include2.#include  3.intfun(charstr,inta,intb)4.{  5.if(str[a]!

=str)return0;  6.elseif(a==b||a+1==b&&str[a+1]==str)return1;7.elseif(str[a]==str)return1&&fun(str,a+1,b-1);8.}  9.voidmain(){10.charstr[100];scanf(\,str);intn;n=strlen(str);11.switch(fun(str,0,n-1))12.{13.case1:

printf(\);break;14.case0:

printf(\);break;15.}16.}  39求最大公约数——递归  成绩:

5/折扣:

  请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。

=m当m  输出:

  n和m的最大公约数  1.#include2.intgcd(intm,intn)3.{intr;4.r=m%n;  5.returnr==0?

n:

gcd(n,r);6.}  7.intmain()8.{intm,n;  9.scanf(\,&m,&n);10.printf(\,gcd(m,n));11.return0;12.}  40求序列之和——递归  成绩:

5/折扣:

  请使用递归算法求下列序列的前n项之和。

1+1/2-1/3+1/4-1/5......输入:

n  输出:

  序列的前n项和1.#include\2.intmain()3.{intn;  4.doubleSUM(int);5.scanf(\,&n);  6.n==1?

printf(\):

printf(\,SUM(n));7.return0;8.}  9.doubleSUM(intn)10.{if(n==2)return1+/n;11.elseif(n%2)return-/n+SUM(n-1);12.elsereturnSUM(n-1)+/n;13.}    44.函数递归  成绩:

10/折扣:

  编写一个函数,使用递归算法求满足下述定义的整数序列的第n项。

f(n)=    1  f(n-1)+f(n-3)f(n-2)+f(n-4)-1  当n>=0且n4且n为偶数时当n>4且n为奇数时其他    函数原型如下:

  intfindf(intn);    参数说明:

n项数;返回值是第n项值。

例如输入:

10,输出:

8  预设代码前置代码  viewplaincopytoclipboardprint?

  1.2.3.4.5.6.7./*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/  #include  intmain()  {intn,s,findf(int);scanf(\,&n);  8.s=findf(n);  9.printf(\,s);10.return0;11.}12.13./*PRESETCODEEND-NEVERTOUCHCODEABOVE*/  1.intfindf(intn)2.{  3.inti;  4.if(n>=0&&n  5.if(n>4&&n%2==0)i=findf(n-1)+findf(n-3);6.if(n>4&&n%2==1)i=findf(n-2)+findf(n-4);7.if(n  #includemain(){  intm,n,a,i,j,s=0;  printf(\scanf(\intb[m][n];if(m>n){i=m;m=n;n=i;s=1;}  intc[m][n];for(i=0;i  for(j=0;j  for(a=1;a  if(a%2!

=0)  {c[0][a]=c[0][a-1]+1;  for(i=1,j=a-1;i>=0&&i=0&&j  {c[a][0]=c[a-1][0]+1;

  

      for(i=a-1,j=1;i>=0&&i=0&&j  for(a=m;a  if(a%2!

=0)  {c[0][a]=c[0][a-1]+1;  for(i=1,j=a-1;i>=0&&i=0&&j  {c[m-1][a+1-m]=c[m-1][a-m]+1;  for(i=m-2,j=a+2-m;i>=0&&i=0&&j  for(a=n;a  if(a%2!

=0)  {c[a+1-n][n-1]=c[a-n][n-1]+1;  for(i=a+2-n,j=n-2;i>=0&&i=0&&j  {c[m-1][a+1-m]=c[m-1][a-m]+1;  for(i=m-2,j=a+2-m;i>=0&&i=0&&j  if(s==1)  {for(i=0;i  for(j=0;j  for(j=0;j  printf(\\putchar(‘\\n’);  }}else  for(i=0;i  for(j=0;j  printf(\\putchar(‘\\n’);}}    #include””#defineN5intmain(){  inta[N][N];inti,j,m=0,n=0;intcount=1;for(i=1;i  a[m][n]=count;if(i%2==0){m++;n--;if(n  count++;}  m=1;n=N-1;  for(i=N-1;i>=1;i--)for(j=i;j>=1;j--){  a[m][n]=count;  if(i%2==0)  {  m++;  n--;  if(m>N-1)  {n+=2;  m=N-1;  }  }  else  {m--;n++;  if(n>N-1)  {  m+=2;  n=N-1;  }  }  count++;}  for(i=0;i  printf(\if(j==N-1)printf(\}  system(\return0;}    #includemain(){  inti,j,N,c;  scanf(\  for(i=1;i  {if

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2