北理工C语言编程网上作业答案.docx
- 文档编号:7226044
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:34
- 大小:29.03KB
北理工C语言编程网上作业答案.docx
《北理工C语言编程网上作业答案.docx》由会员分享,可在线阅读,更多相关《北理工C语言编程网上作业答案.docx(34页珍藏版)》请在冰豆网上搜索。
北理工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.#include
2.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.#include
2.main()
3.{
4.intn,a,b,c,s,j=0;
5.scanf("%d",&n);
6.for(a=1;a<10*n;a++)
7.for(b=1;b*15<=a*18;b++)
8.for(c=1;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.#include 2.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)。 #include main() {inta[10]={0},i,max=0; for(i=0;i<10;i++) { scanf("%d",&a[i]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北理工 语言 编程 网上 作业 答案