《C语言作业2(11页).doc》由会员分享,可在线阅读,更多相关《C语言作业2(11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-C语言作业2-第 11 页H1:计算通用产品代码(UPC)的校验位(选作)许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。这种被称为通用产品代码(Universal Product Code,缩写UPC)的条码可以识别生产商和产品。超市可以通过扫描产品上的条码来确定支付此项商品的费用。每一个条码由十二位数字构成,通常这些数字会显示在条码下面。例如,包装为26盎司的Morton牌碘化盐所用条码下的数字是:0 24600 01003 0第一个数字表示商品的种类(0表示大部分的食品杂货,2表示需要称量的货品,3表示药品或和健康相关的商品,而5表示优惠券)。接下来的一组五位数字用来识别生
2、产商。而第二组五位数字则用来区分产品类型(其中包括包装尺寸)。最后一位数字是“校验位”,它可以帮助鉴别先前数字中的错误。如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上第二次加法的结果。随后,再把上述结果减去1。减法后的结果除以10取余数。最后,用9减去上一步骤中得到的余数。现在以Morton碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2
3、+6+0+1+0=9。把第一组加法值乘以3后再加上第二组加法值得到的结果是30。再减去1,结果变为29。再把这个值除以10取余数为9。9在减去余数结果9,最终值为0输入每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。输出UPC的校验位测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 0 2. 24600 3. 01003以文本方式显示 1. 01秒 64M 0 解法:#includemain()int a,b,c,q,e,f,g,h,i,j,k,m,n,p,x,y,z;scanf(%1d,&a);scanf
4、(%1d%1d%1d%1d%1d,&b,&c,&q,&e,&f);scanf(%1d%1d%1d%1d%1d,&g,&h,&i,&j,&k);x=a+c+e+g+i+k;y=b+q+f+h+j;m=x*3+y;n=m-1;z=n%10;p=9-z;printf(%dn,p);H2:数制转换(选作)我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。 这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此
5、只要选择合适的进制, 12 和 5 就可以是相等的。 程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 236 之间。对于十以下的数字,用 09 表示,而十以上的数字,则使用大写的 AZ 表示。 求出分别在 236 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 125以文本方式显示 1. 12(base3)=5(base6)1秒 64M 0 测试用例 2以
6、文本方式显示 1. 123456以文本方式显示 1. 123isnotequalto456inanybase2.361秒 64M 0 测试用例 3以文本方式显示 1. 10A以文本方式显示 1. 10(base10)=A(base11)1秒 64M 0 测试用例 4以文本方式显示 1. 12456以文本方式显示 1. 12isnotequalto456inanybase2.361秒 64M 0 #define N 50 #includestring.h #includestdio.h main() char aN,bN,dN,eN,d0N; int i,j,o,r,g,h,w,t,l,k,ma
7、x1,max2; double pN,qN=0,uN,vN=0,cN,fN,m,n;for(i=0;iN;i+) scanf(%c,&ai); if(ai=x20) l=i; break; gets(d); if(d0!=x20)k=strlen(d);goto C;if(d0=x20)strcpy(d0,d);g=strlen(d0);for(i=0;d0i=x20;i+);j=i;for(i=0;ig-j;i+) di=d0i+j;k=g-j; C:for(i=0;il;i+) bi=al-i-1; if(bi=x30) ci=bi-0; if(bi=x41) ci=bi-7; for(i
8、=0;ik;i+) ei=dk-i-1; if(ei=x30) fi=ei-0; if(ei=x41) fi=ei-7; max1=c0; for(i=1;il;i+) if(max1ci) max1=ci; if(max1=0) max1=1;max2=f0; for(i=1;ik;i+) if(max2fi) max2=fi; if(max2=0) max2=1; for(i=max1+1;i=36;i+)for(j=0;jl;j+) m=cj; for(g=0;gj;g+) m=m*i; qi=qi+m;for(i=max2+1;i=36;i+)for(j=0;jk;j+) n=fj;
9、for(g=0;gj;g+) n=n*i; vi=vi+n; for(g=max1+1;g=36;g+) for(h=max2+1;h=36;h+) if(qg=vh) w=g,t=h; goto out; for(i=0;il;i+) printf(%c,ai);printf( is not equal to );for(i=0;ik;i+) printf(%c,di);printf( in any base 2.36n);goto outs; out:for(i=0;il;i+) printf(%c,ai); printf( (base %d) = ,w); for(i=0;ik;i+)
10、printf(%c,di); printf( (base %d)n,t); outs:; 16. 空心字符菱形输入: 菱型起始字母和菱形的高度。输出: 参看测试用例,打印空心的由字符组成的菱形。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. C4以文本方式显示 1. C 2. DD 3. EE 4. FF 5. EE 6. DD 7. C1秒 64M 0 #include void main() char letter; int i,j,k,l,n; scanf(%c %d,&letter,&n); for(i=0;in;i+) if(i=0) for(j=0;j0
11、) for(j=0;jn-1-i;j+)printf( ); printf(%c,letter+i); for(j=0;j=0;i-) if(i=0) for(j=0;j0) for(j=0;jn-1-i;j+)printf( ); printf(%c,letter+i); for(j=0;j2*i-1;j+)printf( ); printf(%c,letter+i); printf(n);17. 数字菱形这是非信息类今年出的题目,大家来看看,你会做吗?输入 n 的值,输出如下例( n=4 )所示的数字菱形。 4 434 43234 4321234 43234 434 4 输入: n 输出:
12、 数字菱形 友情提示:同学们总结一下打印星号组成的实心图形程序的编程思路:第一步,打印星号组成的正方形;第二步,改变每行星号的个数,打印每行星号数量不一样的图形;如果是空心图形,每行第一个和最后一个位置输出星号,其他位置输出空格。现在我们练习输出变化的字符,在打印星号图形的基础上,原来输出*号的位置,将printf(*);改为printf(%2d,x);当然,原来输出一个*号的地方只占一个字符的位置,现在都要改为2个字符的位置,如果输出的是数字且多于2个,则要是%3d或%4d了。x是多少呢?则要寻找其规律,就是该输出位置与所在行列的关系。注意给出的测试用例,输出的数字是左对齐啊。不用数组就可以
13、完成。 测试输入期待的输出时间限制内存限制额外进程测试用例 3以文本方式显示 1. 3以文本方式显示 1. 3 2. 323 3. 32123 4. 323 5. 3无限制 64M 0 测试用例 1以文本方式显示 1. 1以文本方式显示 1. 11秒 64M 0 测试用例 2以文本方式显示 1. 2以文本方式显示 1. 2 2. 212 3. 2无限制 64M 0 1. #include 2. intmain() 3. inti,j,k,n,t; 4. scanf(%d,&n); 5. for(i=1;i=n;i+) 6. for(j=1;j=n+i-1;j+) 7. if(j=n-i+1;k
14、-,j+)printf(%-2d,k); 10. for(k=n-i+2;k=n;k+,j+)printf(%-2d,k); 11. printf(n); 12. for(i=n+1;i=2*n-1;i+) 13. for(j=1;j=3*n-i-1;j+) 14. if(j=i-n+1;t-,j+)printf(%-2d,t); 17. for(t=i-n+2;t=n;t+,j+)printf(%-2d,t); 18. printf(n); 18. 寻找特殊偶数背景有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。输入所要寻找的四位偶数的范围。每组输
15、入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。输出列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 30003020 2. 60406090 3. 00以文本方式显示 1. 3012301430163018 2. counter=4 3. 6042604860526054605860726074607860826084 4. counter=10无限制 64M 0 测试用例 2以文本方式显示 1. 9101 2. 87-1 3. 00以文本方式显示 1. Error 2.
16、 Error无限制 64M 0 #include#includemain()int i,j,k,a,b,c,d,m=0,e;for(e=0;e=0;e+)scanf(%d%d,&i,&j);if(i=0)|(j=0) break;else if(i9999|i9999|j1000) printf(Errorn);else for(k=i;k=j;k+)if (k%2=1) continue;a=k/1000;b=(k%1000)/100;c=(k%100)/10;d=k%10;if(a=b)|(b=c)|(c=d) |(d=a)|(a=c)|(d=b) continue;printf(%d ,
17、k);m+=1;printf(ncounter=%dn,m); m=0;H3:猜数字(选作)有如下一组数字,其中每个数字都在 1 63 之间, 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 632 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31 34 35 38 39 42 43 46 47 50 51 54 55 58 59 62 634 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 36
18、37 38 39 44 45 46 47 52 53 54 55 60 61 62 638 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47 56 57 58 59 60 61 62 6316 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 6332 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
19、 55 56 57 58 59 60 61 62 63 现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。输入: 程序的输入是一串以空白符分开的数字,当输入 0 时表示输入结束。输出: 输出猜到的数字。 测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 120以文本方式显示 1. 31秒 64M 0 测试用例 2以文本方式显示 1. 210以文本方式显示 1. 31秒 64M 0 测试用例 3以文本方式显示 1. 240以文本方式显示 1. 101秒 64M 0 允许迟交: 是1. #include 2. #include
20、3. intmain() 4. inti,n=0; 5. while(1) 6. scanf(%d,&i); 7. if(i=0)break; 8. n+=pow(2,i-1); 9. printf(%dn,n); 10. return0; H4:小蜜蜂(选作)一只小蜜蜂在如下图所示的蜂窝上爬行。它爬行时,只能从一个格爬到相邻的大号格子中。例如,从 1 号格子可以爬到 2 号或者 3 号格子,从 2 号则可以爬到 3 号或者 4 号格子。 请问从一个格子 a 爬到一个格子 b 一共有多少种可行的路线。 输入:分别是起始点 a 和终止点 b 的编号。( a 和 b 在 1100 之间,且 ab
21、。) 输出:测试输入期待的输出时间限制内存限制额外进程测试用例 1以文本方式显示 1. 14以文本方式显示 1. 31秒 64M 0 测试用例 2以文本方式显示 1. 15以文本方式显示 1. 51秒 64M 0 #include#define N 3int main() int a,b,i,k;long cN=0,0,0,dN=1,0,0,eN=0,0,0; scanf(%d%d,&a,&b); for(;ab;a+) for(i=0;iN;i+) ei=ci+di; ci=di; di=ei; for(k=0;k=100000000) dk+1+=dk/100000000; dk%=100000000; if(d20) printf(%d%08d%08dn,d2,d1,d0); else if(d10) printf(%d%08dn,d1,d0); else printf(%dn,d0); return 0;
限制150内