1、北理工C语言编程网上作业答案北理工C语言编程网上作业答案H1:计算通用产品代码(UPC)的校验位 成绩: 5 / 折扣: 背景 许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。这种被称为通用产品代码的条码可以识别生产商和产品。超市可以通过扫描产品上的条码来确定支付此项商品的费用。每一个条码十二位数字构成,通常这些数字会显示在条码下面。例如,包装为26盎司的Morton牌碘化盐所用条码下的数字是: 0 24600 01003 0 第一个数字表示商品的种类。接下来的一组五位数字用来识别生产商。而第二组五位数字则用来区分产品类型。最后一位数字是“校验位”,它可以帮助鉴别先前数字中的错误。
2、如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。 下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上第二次加法的结果。随后,再把上述结果减去1。减法后的结果除以10取余数。最后,用9减去上一步骤中得到的余数。现在以Morton碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2+6+0+1+0=9。把第一组加法值乘以3后再加上第二组加法值得到的结果是30。再减去1,结果变为29。再把这个值除以
3、10取余数为9。9在减去余数结果9,最终值为0。 输入 每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。 输出 UPC的校验位 提示 本题有隐藏测试用例。如果想多找不同的实例验证你的算法,可以拿身边书或食品背后的条码测试一下。 1. #include 2. main() 3. 4. int a,b,c; 5. int b1,b2,b3,b4,b5; 6. int c1,c2,c3,c4,c5; 7. int d1,d2,d3,d4; 8. scanf(,&a,&b,&c); 9. b1=b/10000,b2=(b/1000)_,b3
4、=(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 ,在十进制下它们
5、是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。 程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 236 之间。对于十以下的数字,用 09 表示,而十以上的数字,则使用大写的 AZ 表示。 求出分别在 236 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。 21. 零钱换整钱 成绩: 5 / 折扣: 小明手中有一堆硬币,小红手中有若干张
6、10元的整钱。已知 1 角的硬币厚度为 ,5 角的硬币厚 , 1 元的硬币为 。小明和小红一起玩游戏,小红拿出若干张10元的纸币,小明要将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,如果 3 摞硬币一样高,并且金额能够正好小红要求的面值,则双方可以进行交换,否则没有办法交换。 输入: 小红希望交换几张10元的纸币 输出: 1 角的数量,5 角的数量,1元的数量 1. #include 2. main() 3. 4. int n,a,b,c,s,j=0; 5. scanf(,&n); 6. for(a=1;a7. for(b=1;b*1522. 买东西 成绩:
7、 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. #include 2. main() 3. 4. int a,b,c,M,N,s; 5. sc
8、anf(,&M,&N); 6. for(a=1;a8. for(b=1;b23 谁能出线 成绩: 10 / 折扣: 背景: 电视台举办“超级学生”才艺大赛,于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数,各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。 输入: 按顺序给出一个小组10个人的最后得分。 输出: 能够出线的学生序号。 #include main() int a10=0,i,max=0; for(i=0;i scanf( if(max for(i=0;i24. 寻找特殊偶数 成绩: 5 / 折扣: 背景 有一种
9、特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。 输入 所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。 输出 列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。 1. #include 2. main() 3. 4. int a,b,counter,i,number1,number2,number3,number4; 5. do 6. 7. scanf(,&a,&b); 8. if(a=0)&(b=0) 9. break; 10. if(a=b) printf(); 11. e
10、lse 12. 13. if(amber2!=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 / 折扣: 两个二年级小朋友在一起玩游戏,小明给出一堆不超过两位的正整数和运算要求,小丽要找出这些整数中的最大值和
11、最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。 输入: 用逗号分隔的不超过两位的正整数序列,及其运算符和等号 输出: 最大数 op 最小数=结果 1. #include 2. int main() 3. 4. int op=0; 5. int max=0; 6. int min=99; 7. int mark=0; 8. int n1=-1,n2=-1,n=0; 9. for(;1;) 10. 11. char c; 12. scanf(,&c); 13. if(c=,) 14. 15. if(mark=1) 16. n=n1; 17. else if(mark=2) 18.
12、 n=n1*10+n2; 19. if(nmax) 20. max=n; 21. if(n36. op=5; 37. else if(c=) 38. break; 39. else if(c=0) 40. 41. if(mark=0) 42. n1=c-0;mark=1; 43. else if(mark=1) 44. n2=c-0;mark=2; 45. 46. 47. 48. switch (op) 49. 50. case 1: 51. 52. printf(,max,min,max+min); 53. break; 54. 55. case 2: 56. 57. printf(,max
13、,min,max-min); 58. break; 59. 60. case 3: 61. 62. printf(,max,min,max*min); 63. break; 64. 65. case 4: 66. 67. if(min=0) 68. printf(); 69. else 70. 71. printf(,max,min,max/min); 72. 73. break; 74. 75. case 5: 76. 77. if(min=0) 78. printf(); 79. else 80. 81. printf(,max,min,max%min); 82. 83. break; 8
14、4. 85. 86. 27 等值数列段 成绩: 10 / 折扣: 如果一个数列中的某一段的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。 输入: N个元素组成的整数数列A的,都退出该游戏,直到只剩下一位小朋友游戏才中止。 每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。 现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。 输入: 小朋友的个数 要被练习的数字 输出: 最终被留下的小朋友的序号 说明: 如“要被练习的数字”是5,则每次数到5的同学要退出该游戏 1. #include 2. voi
15、d main() 3. 4. int N,n,i,s=0,a; 5. scanf(,&N,&n); 6. for(i=2;i9. printf(,a); 10. 29 组成最大数 成绩: 10 / 折扣: 任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。 输入: 自然数 n 输出: 各位数字组成的最大数 1. #include 2. #include 3. int main() 4. 5. char a100000,c; 6. int i,j,k; 7. scanf(,&a); 8. i=strlen(a); 9. for(j=0;j16.
16、 ak+1=c; 17. 18. 19. printf(,a); 20. printf(); 21. 30 删除重复字符 成绩: 5 / 折扣: 背景: 输入一个长度不超过 100 的字符串,删除串中的重复字符。 输入: 输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。 输出: 删除重复字符后的字符串。例如:abced。 1. #include 2. 3. #include 4. 5. int alread_saved(char lastchar, char newstr, int j) 6. 7. 8. 9. int i=0; 10. 11. while(i1
17、8. 19. 20. 21. return 0; 22. 23. 24. 25. void main() 26. 27. 28. char str100; char newstr100; int n,i,j; 29. 30. i=0; 31. 32. j=0; 33. 34. gets(str); 35. 36. while(stri!=0) 37. 38. 39. 40. if(!alread_saved(stri,newstr,j) 41. newstrj=stri; j+; 42. 43. 44. i+; 45. 46. 47. 48. newstrj=0; 49. 50. puts(n
18、ewstr); 51. 52. 31 合并字符串 成绩: 10 / 折扣: 输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到 大排列。 输入: 两个已经排好顺序的两个字符串 输出: 一个合并在一起的有序的字符串 要求: 设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。 如果采用先进行串连接,然后再进行排序的算法,则效率太低了。 1. #include 2. 3. #include 4. 5. void MergeList(char str1,char str2,char str3); 6. 7. void main() 8. 9.
19、 10. char str1100; char str2100; char str3100; gets(str1); gets(str2); 11. 12. MergeList(str1,str2,str3); 13. 14. printf(,str3); 15. 16. 17. 18. void MergeList(char str1,char str2,char str3) 19. 20. 21. 22. int i,j,k; 23. 24. i=0;j=0;k=0; 25. int lengthOfStr1,lengthOfStr2; lengthOfStr1=strlen(str1);
20、 lengthOfStr2=strlen(str2); 26. while(i31. 32. while(iwhile(j32 串的减法 成绩: 10 / 折扣: 输入字符串s和t,将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。 例如:当s=,t=时,u=。 输入: 第一行为串s 第二行为串t 输出: 串u 1. #include 2. #include 3. int main() 4. 5. char a80; 6. char b80; 7. gets(a); 8. gets(b); 9. 10. int
21、l=strlen(a); 11. 12. for(int i=0;bi!=0;i+) 13. 14. for(int j=0;j21. for(i=1;i37 大数分解 成绩: 5 / 折扣: 2007级在“计算机科学导论”的期末考试中有一道试题。下面请你看看那题目应该如何编写。 从键盘输入的一个大于 1 的整数,通过算法将该整数分解为若干因子的乘积。 输入: 一个正整数。 输出: 分解后的各个因子。 1. 2. 3. 4. 5. 6. 7. 8. #include void main() int n,i; scanf(,&n); for(i=2;n1;) if(n%i=0) printf(,
22、i);n/=i; 9. else i+; 10. 11. 38 回文字符串递归 成绩: 5 / 折扣: 有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。 输入: 字符串 输出: Yes或者No 说明: 如输出Yes,说明输入的字符串是一个回文字符串 输出No,说明输入的字符串不是一个回文字符串 请使用递归算法实现。 1. #include 2. #include 3. int fun(char str,int a,int b) 4. 5. if(stra!=str) return 0 ; 6. else if(a=b|a+1=b&stra+1=st
23、r) return 1; 7. else if(stra=str) return 1&fun(str,a+1,b-1); 8. 9. void main() 10. char str100; scanf(,str); int n; n=strlen(str); 11. switch(fun(str,0,n-1) 12. 13. case 1:printf();break; 14. case 0:printf();break; 15. 16. 39 求最大公约数递归 成绩: 5 / 折扣: 请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。 = m 当 m输出: n和m的最大公约数 1
24、. #include 2. int gcd(int m,int n) 3. int r; 4. r=m%n; 5. return r=0?n:gcd(n,r); 6. 7. int main() 8. int m,n; 9. scanf(,&m,&n); 10. printf(,gcd(m,n); 11. return 0; 12. 40 求序列之和递归 成绩: 5 / 折扣: 请使用递归算法求下列序列的前n项之和。 1 + 1/2 - 1/3 + 1/4 -1/5 . 输入: n 输出: 序列的前n项和 1. #include 2. int main() 3. int n; 4. doubl
25、e SUM(int); 5. scanf(,&n); 6. n=1?printf():printf(,SUM(n); 7. return 0; 8. 9. double SUM(int n) 10. if(n=2) return 1+/n; 11. else if(n%2) return -/n+SUM(n-1); 12. else return SUM(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 且
26、n 4 且n为偶数 时 当 n 4 且n为奇数 时 其他 函数原型如下: int findf(int n); 参数说明:n 项数;返回值是第n项值。 例如输入:10,输出:8 预设代码 前置代码 view plaincopy to clipboardprint? 1. 2. 3. 4. 5. 6. 7. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include int main() int n,s, findf( int ); scanf(, &n); 8. s = findf(n); 9. printf(, s); 10. retur
27、n 0; 11. 12. 13. /* PRESET CODE END - NEVER TOUCH CODE ABOVE */ 1. int findf(int n) 2. 3. int i; 4. if(n=0&n5. if(n4&n%2=0) i=findf(n-1)+findf(n-3); 6. if(n4&n%2=1) i=findf(n-2)+findf(n-4); 7. if(n#include main() int m,n,a,i,j,s=0; printf(scanf(int bmn; if(mn) i=m; m=n; n=i; s=1; int cmn; for(i=0;if
28、or(j=0;jfor(a=1;aif(a%2!=0) c0a=c0a-1+1; for(i=1,j=a-1;i=0&i=0&j ca0=ca-10+1; for(i=a-1,j=1;i=0&i=0&jfor(a=m;aif(a%2!=0) c0a=c0a-1+1; for(i=1,j=a-1;i=0&i=0&j cm-1a+1-m=cm-1a-m+1; for(i=m-2,j=a+2-m;i=0&i=0&jfor(a=n;aif(a%2!=0) ca+1-nn-1=ca-nn-1+1; for(i=a+2-n,j=n-2;i=0&i=0&j cm-1a+1-m=cm-1a-m+1; for(
29、i=m-2,j=a+2-m;i=0&i=0&j if(s=1) for(i=0;ifor(j=0;jfor(j=0;jprintf( putchar(n); else for(i=0;ifor(j=0;jprintf( putchar(n); #include ” #define N 5 int main() int aNN; int i,j,m=0,n=0; int count=1; for(i=1;i amn=count; if(i%2=0) m+; n-; if(ncount+; m=1;n=N-1; for(i=N-1;i=1;i-) for(j=i;j=1;j-) amn=count;if(i%2=0)m+;n-; if(mN-1)n+=2;m=N-1;else m-;n+;if(nN-1) m+=2;n=N-1; count+; for(i=0;i printf( if(j=N-1) printf( system( return 0; #include main( ) int i,j,N,c; scanf(for (i=1;i if
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1