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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

H1:计算通用产品代码(UPC)的校验位(选作)成绩:5/折扣:0.8背景许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。这种被称为通用产品代码(UniversalProductCode,缩写UPC)的条码可以识别生产商和产品。超市可以通过扫描产品上的条码来确定支付此项商品的费用。每一个条码由十二位数字构成,通常这些数字会显示在条码下面。例如,包装为26盎司的Morton牌碘化盐所用条码下的数字是:024600010030第一个数字表示商品的种类(0表示大部分的食品杂货,2表示需要称量的货品,3表示药品或和健康相关的商品,而5表示优惠券)。接下来的一组五位数字用来识别生产商。而第二组五位数字则用来区分产品类型(其中包括包装尺寸)。最后一位数字是“校验位”,它可以帮助鉴别先前数字中的错误。如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以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.#includestdio.h2.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(%d\n%d\n%d,&a,&b,&c);9.b1=b/10000,b2=(b/1000)%10,b3=(b/100)%10,b4=(b/10)%10,b5=b%10;10.c1=c/10000,c2=(c/1000)%10,c3=(c/100)%10,c4=(c/10)%10,c5=c%10;11.d1=a+b2+b4+c1+c3+c5,d2=b1+b3+b5+c2+c4,d3=(3*d1+d2-1)%10,d4=9-d3;12.printf(%d\n,d4);13.}H2:数制转换(选作)成绩:5/折扣:0.8我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如12和5,在十进制下它们是不等的,但若12使用3进制而5使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制,12和5就可以是相等的。程序的输入是两个数字M和N(其十进制的值不超过1000000000),它们的进制在2~36之间。对于十以下的数字,用0~9表示,而十以上的数字,则使用大写的A~Z表示。求出分别在2~36哪种进制下M和N相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。21.零钱换整钱成绩:5/折扣:0.8小明手中有一堆硬币,小红手中有若干张10元的整钱。已知1角的硬币厚度为1.8mm,5角的硬币厚1.5mm,1元的硬币为2.0mm。小明和小红一起玩游戏,小红拿出若干张10元的纸币,小明要将1角的硬币放成一摞,将5角的硬币硬币放成一摞,将1元的硬币放成一摞,如果3摞硬币一样高,并且金额能够正好小红要求的面值,则双方可以进行交换,否则没有办法交换。输入:小红希望交换几张10元的纸币输出:1角的数量,5角的数量,1元的数量1.#includestdio.h2.main()3.{4.intn,a,b,c,s,j=0;5.scanf(%d,&n);6.for(a=1;a10*n;a++)7.for(b=1;b*15=a*18;b++)8.for(c=1;ca;c++)9.{10.s=a+b*5+c*10;11.if(b*15==c*20&&a*18==b*15&&s==100*n)12.{printf(%d,%d,%d\n,a,b,c);13.j+=1;14.}15.}16.if(j==0)17.printf(Nochange.\n);18.return0;19.}22.买东西成绩:5/折扣:0.8某商品有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.#includestdio.h2.main()3.{4.inta,b,c,M,N,s;5.scanf(%d%d,&M,&N);6.for(a=1;a=N;a++)7.{8.for(b=1;b=N;b++)9.{10.c=N-a-b;11.if(c%3==0)12.{13.s=a*5+b*3+c/3;14.if(s==M)15.printf(%d%d%d\n,a,b,c);16.}17.}18.}19.}23谁能出线成绩:10/折扣:0.8背景:电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。输入:按顺序给出一个小组10个人的最后得分(int)。输出:能够出线的学生序号(0~9)。#includestdio.hmain(){inta[10]={0},i,max=0;for(i=0;i10;i++){scanf(%d,&a[i]);if(maxa[i])max=a[i];}for(i=0;i10;i++){if(a[i]==max)printf(%d\n,i);}}24.寻找特殊偶数成绩:5/折扣:0.8背景有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。输入所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。输出列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。1.#includestdio.h2.main()3.{4.inta,b,counter,i,number1,number2,number3,number4;5.do6.{7.scanf(%d%d,&a,&b);8.if((a==0)&&(b==0))9.break;10.if(a=b)printf(Error\n);11.else12.{13.if((a1000)||(b1000))printf(Error\n);14.else15.{16.for(i=a,counter=0;i=b;i++)17.{18.number1=i/1000;19.number2=i/100%10;20.number3=i/10%10;21.number4=i%10;22.if((number1!=number2)&&(number1!=number3)&&(number1!=number4)&&(number2!=number3)&&(number2!=number4)&&(number3!=number4))23.{24.if((i%2)==0)25.{26.printf(%d,i);27.counter++;28.}29.}30.}31.printf(\n);32.printf(counter=%d\n,counter);33.}34.}35.}36.while((a!=0)&&(b!=0));37.return;38.}26二年级小学生的题目成绩:10/折扣:0.8两个二年级小朋友在一起玩游戏,小明给出一堆不超过两位的正整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。输入:用逗号分隔的不超过两位的正整数序列,及其运算符和等号输出:最大数op最小数=结果1.#includestdio.h2.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,&c);13.if(c==',')14.{15.if(mark==1)16.n=n1;17.elseif(mark==2)18.n=n1*10+n2;19.if(nmax)20.{max=n;}21.if(nmin)22.{min=n;}23.mark=0;24.n1=-1,n2=-1;25.continue;26.}27.if(c=='+')28.op=1;29.elseif(c=='-')30.op=2;31.elseif(c=='*')32.op=3;33.elseif(c=='/')34.op=4;35.elseif(c=='%')36.op=5;37.elseif(c=='=')38.{break;}39.elseif(c='9'&&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(%d+%d=%d\n,max,min,max+min);53.break;54.}55.case2:56.{57.printf(%d-%d=%d\n,max,min,max-min);58.break;59.}60.case3:61.{62.printf(%d*%d=%d\n,max,min,max*min);63.break;64.}65.case4:66.{67.if(min==0)68.printf(Error!\n);69.else70.{71.printf(%d/%d=%d\n,max,min,max/min);72.}73.break;74.}75.case5:76.{77.if(min==0)78.printf(Error!\n);79.else80.{81.printf(%d%%%d=%d\n,max,min,max%min);82.}83.break;84.}85.}86.}27等值数列段成绩:10/折扣:0.8如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。输入:由N个元素组成的整数数列A(其中N=50)输出:A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出Noequalnumberlist.说明:始末位置是指数组下标,即0表示第一个元素。如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。当在一个LIST中出现两个等长的连续串的时候,我们的答案应该是第一个等长串。1.#includestdio.

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功