1.背景:
你是一名室内装潢工程队的配料员。你的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案如下: 1 2 6 7 15 3 5 8 14 16 4 9 13 17 22 10 12 18 21 23 11 19 20 24 25 学了 C 语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。 输入:
方阵N的大小。 输出; 方阵。
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
#include { int i=0j=0gnt=1; int a[100][100]; scanf(\"%d\"&n); for(g=0;g { for(i=gj=0;i>=0&&j<=g;i--j++) { a[i][j]=t; t++; } } } for(g=1;g 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. } else { for(i=n-1j=g;i>=g&&j 2. 有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。 输入: 字符串 输出: Yes或者No 说明: 如输出Yes,说明输入的字符串是一个回文字符串 输出No,说明输入的字符串不是一个回文字符串 请使用递归算法实现。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. #include char a[100]; int ij=1k; gets(a); k=strlen(a); for(i=0;i break; } } if(j==0) printf(\"No\\n\"); else printf(\"Yes\\n\"); } 3.字符串匹配问题:输入一个字符串,计算其中包含的连续给定的子字符串的个数。 例如输入字符串\" EFABCABCABCDABCDD ” 给定子字符串\" ABC” ,输出是 3 。 函数原型: int countsub( char *str char *subs ) 。 参数说明: str 保存输入的字符串的首地址, subs 保存需要统计的子字符串的首地址。 返回值:包含的连续子字符串的个数。 预设代码: 1. 2. 3. 4. 5. 6. 7. 8. 9. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include int countsub( char *str char *ss ); main( ) { char s1[1000] = {0} s2[100] = {0}; gets(s1); gets(s2); printf(\"%d\\n\" countsub( s1 s2 ) ); } /* PRESET CODE END - NEVER TOUCH CODE ABOVE */ 代码: int countsub(char *strchar *ss) { int ijqk=0rmax=0flag=1h; for(r=0;str[r]!='\\0';r++); for(i=0;i<=r;) { for(j=iq=0;j<=r;j++) { if(ss[q]=='\\0') { h=q; k++; flag=0; break; } if(str[j]==ss[q]) q++; else 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. { if(k>max) max=k; k=0; flag=1; break; } } if(flag) i++; else i=i+h; } return max; } 4.功能: 求整数 n 到 m 区间的累加和,其中n<=m。 输入: 区间的起始点n 区间的终止点m 输出: 累加和 要求: 使用递归算法完成。如此简单的题目当然要有隐含的测试用例啦,就3个,看看谁能猜出来。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. #include scanf(\"%d %d\"&i&j); k=i; for(;i<=j;i++) s+=i; printf(\"The sum from %d to %d is %d.\\n\"kjs); return 0; } 5.小明上来大学,学习了用求解平方根的迭代公式。 其中:p 为 x 的近似平方根,e 是结果允许的误差。 输入:x e 输出:p 保留小数点后 8 位。 1. 2. #include 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. double mysqrt(double xdouble ydouble e) { if(fabs(y*y-x) { double xe; scanf(\"%lf %lf\"&x&e); printf(\"%.8lf\\n\"mysqrt(x1.0e)); return 0; } 6.请使用递归算法计算正整数n和m的最大公约数GCD(nm)。 = m 当 m<=n 且 n mod m =0 GCD(NM) = GCD(mn) 当n n和m 输出: n和m的最大公约数 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. #include scanf(\"%d %d\"&x&y); for(i=x;i>0;i--) { if(x%i==0&&y%i==0) { printf(\"%d\\n\"i); return 0; } } } 7.请使用递归算法求下列序列的前n项之和。 1 + 1/2 - 1/3 + 1/4 -1/5 ...... 输入: n 输出: 序列的前n项和(精确到小数点之后第6位) 1. #include 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. int main() { int ins; double sum=0; scanf(\"%d\"&n); if(n==1) { printf(\"1\\n\"); return 0; } for(i=2;i<=n;i++) { if(i%2==0) s=i; else s=-i; sum+=(1.0/s); } printf(\"%lf\\n\"sum+1); } 8.求三个数的公式 小明和小红去参加拍卖会,身为富二代的小红很嚣张地说,\"现在那个拍品我要定了,无论你出的价格是多少,我的出价都比你的价格的Y倍还多Z!”,她还给出了好几组X,Y,Z的值,但是聪明的小明随口说出了三个X,Y,Z的值,让小红的报价居然低于了小明,从而彻底打败了的小红。 输入:三个整数,X,Y,Z 输出:X*Y+Z 1. 2. 3. 4. 5. 6. 7. 8. 9. #include int xyzm; scanf(\"%d%d%d\"&x&y&z); m=x*y+z; printf(\"%d\\n\"m); return 0; } 9.输入整数 x和Y,求出X对Y的余数是多少? 输入:X和Y。 输出:X对Y的余数。 1. 2. #include 3. 4. 5. 6. 7. 8. 9. { int xyz; scanf(\"%d%d\"&x&y); z=x%y; printf(\"%d\\n\"z); return 0; } 10.输入一个数,请你判断这个数是不是偶数。 如果是偶数,请输出Yes 如果不是偶数,请输出No 例如: 输入:19(回车) 输出:No(回车) 1. 2. 3. 4. 5. 6. 7. 8. int main() { int x; scanf(\"%d\"&x); if (x%2==0) printf(\"Yes\\n\"); else printf(\"No\\n\"); return 0; } 11.读入一个四位数。要求你输出千位,百位,十位,个位上的数字,每个数字占一行。 例如: 输入:1234(回车) 输出: 1 2 3 4(回车) 1. 2. 3. 4. 5. 6. #include int Mabcd; scanf(\"%d\"&M); d=M%10c=(M-d)/10%10b=(M-c*10-d)/100%10a=(M-b*100-c*10-d)/1000%10; 7. 8. 9. printf(\"%d\\n%d\\n%d\\n%d\\n\"abcd); return 0; } 12.输入一个整数,则输出对应的字符 例如: 输入:65 输出:A 1. 2. 3. 4. 5. 6. 7. 8. #include int a; scanf(\"%d\"&a); printf(\"%c\\n\"a); return 0; } 13.连续输入若干个数字,再输入一个字符。这个字符可能是+,-,*,/中的某一个,你要猜一下,如果是+,就输出两个数的加法。以此类推。 如果不小心被零除,算你倒霉,你应该输出一个“Go to hell!”(本课程里的每一道题目的每一个输出都应该在结尾加上换行符) 例如: 输入: 23 45 + 输出: 68 1. 2. 3. 4. 5. 6. 7. 8. 9. #include int ab; char c; scanf(\"%d%d\"&a&b); scanf(\"%c\"&c); c=getchar(); if(c=='+') 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. printf(\"%d\\n\"a+b); else if(c=='-') printf(\"%d\\n\"a-b); else if(c=='*') printf(\"%d\\n\"a*b); else if(c=='/') if(b==0) printf(\"Go to hell!\\n\"); else printf(\"%d\\n\"a/b); return 0; } 14.传说中的scanf是一个灰常灰常厉害的妖怪,程序员们经常使用它来“吃掉”键盘传来的数据。scanf非常非常地听话,它在程序员的指挥下,只吃自己想要的数据。如果这个数据不是它可以吃的,它就把数据继续留在键盘里,不去吃它。 键盘传到scanf的嘴里,其实只是一个个ASCII字符(键盘就是根据ASCII码来设计的,不然,干嘛要那么多按键?) 比如:从键盘里传来一个“1”,scanf会根据程序员的指令(%d)或者(%c),来区别对待,如果命令是%d,那么scanf就把这个“1”当作数字1来吃掉,如果命令是“%c”,它就会把这个“1”当作字符'1'来吃掉。 -------------------------------------------------------------------------------------------------------------------------- 现在有一组数据需要输入,可是,录入员是宇航学院大一的新生,他们都不太会使用键盘上的键,输入的数据有时候是混乱的。 比如,要求输入的数据是: “12+13”,他们有时候会输入成“12+ 13”,或者“12 + 13”,甚至“12 +13”,虽然数据本身没什么问题,但中间经常会有若干个空格出现。 现在,scanf出场了,它说,一个scanf就可以搞定这些数据,同时吃掉一个整数,一个字符和第二个整数。 所以,请你根据scanf的强大,写出一个scanf函数,能够完成小小计算器的功能。 输入:一个整数m, 一个字符op 以及另一个整数n 输出:m op n的运算结果 【备注1】op可能是\"+-*/%\"中的任何一个操作。 【备注2】唯一可能遇到的问题就是,整数m和op以及n之间可能会有若干个空格。 【备注3】只能使用一个scanf,同时读入三个数据。 例如: 输入:12 + 13 输出:25 1.任意给出一个年月日,求出是星期几。 输入: 年 月 日 输出: 0~6。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. #include int ymdW; scanf(\"%d%d%d\"&y&m&d); if(3>m) { m+=12; y--; } W=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7; printf(\"%d\\n\"W); return 0; } 15.小明在中学学习了什么是素数。素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。 输入: 取值范围 输出: 该范围内的最大素数 1. 2. 3. 4. 5. 6. 7. 8. #include int min; scanf(\"%ld\"&m); for(n=m;n>1;n--) { for(i=2;i { if(n%i==0) break; } if(i==n) break; } printf(\"The max prime number is %d.\\n\"n); return 0; } 16.再次给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。 输入: 年 月 日 输出: 0~6。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. #include int yearmonthdaynweektotal; scanf(\"%d%d%d\"&year&month&day); if(year<=1900) { printf(\"year is error.\\n\"); return 0; } if(month>=13||month<1) { printf(\"month is error.\\n\"); return 0; } if(day<0) { printf(\"day is error.\\n\"); return 0; } switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: 23. 24. 25. 26. 27. 28. if(day>31) { printf(\"day is error.\\n\"); return 0; } break; case 4: case 6: 29. 9: 30. case 11: 31. if(day>30) 32. { printf(\"day is error.\\n\"); 33. return 0; } 34. break; 35. case 2:if((year%4==0&&year%100!=0)||year%400==0) 36. { if(day>29) 37. { printf(\"day is error.\\n\"); 38. return 0; } } 39. else 40. { if(day>28) 41. { printf(\"day is error.\\n\"); 42. return 0; } } 43. break; } 44. if((year%4==0&&year%100!=0)||year%400==0) case 45. 46. 47. 48. 49. 50. 51. 52. 53. . 55. 56. 57. 58. 59. 60. 61. 62. { week=(year+year/4+year/400-year/100-1)%7; for(n=0;n if(n==4||n==6||n==9||n==11) total+=30; } } else { week=(year+year/4+year/400-year/100)%7; for(n=0;n total+=31; if(n==2) total+=28; if(n==4||n==6||n==9||n==11) total+=30; } } week=(week+total+day-1)%7; printf(\"%d\\n\"week); return 0; } 17.背景 有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。 输入 所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。 输出 列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. #include { int ijabcdmcounter=0; while(1) { scanf(\"%d%d\"&i&j); if(i==0&&j==0) return 0; if((i>999&&i<10000)&&(j>999&&j<10000)&&(j>=i)) { for(m=i;m<=j;m++) { if(m%2==0) 11. 12. )) { a=m/1000;b=(m%1000)/100;c=(m%100)/10;d=m%10; if((a!=b)&&(a!=c)&&(a!=d)&&(b!=c)&&(b!=d)&&(c!=d { printf(\"%-6d\"m); counter++; } } } printf(\"\\n\"); printf(\"counter=%d\\n\"counter); counter=0; } else printf(\"Error\\n\"); } return 0; } 13. 14. 15. 16. 17. 18. 19. 18.请编写一个程序寻找一种特殊整数:一个 n 位的正整数等于其各位数字的n次方之和。 例如:407=4×4×4+0×0×0+7×7×7。所以407就是一个特殊数。 输入: 正整数的位数n(n<=6)。 输出: 所有此n位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:\"No output.”;若存在,则从小到大进行输出。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. #include { int nijabcdemN=0; scanf(\"%d\"&n); if(n==1) { i=1;j=9; for(i=1;i<=9;i++) { printf(\"%d\\n\"i); N++; } return 0; } else if(n==2) { i=10;j=99; for(i=10;i<=j;i++) { m=i/10;e=i%10; if(i==m*m+e*e) { printf(\"%d\\n\"i); N++; } } if(N==0) printf(\"No output.\\n\"); 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. e) return 0; } else if(n==3) { i=100;j=999; for(i=100;i<=j;i++) { d=i/100;m=i%100/10;e=i%10; if(i==d*d*d+m*m*m+e*e*e) { printf(\"%d\\n\"i); N++; } } if(N==0) printf(\"No output.\\n\"); return 0; } else if(n==4) { i=1000;j=9999; for(i=1000;i<=j;i++) { c=i/1000;d=(i%1000)/100;m=(i%100)/10;e=i%10; if(i==c*c*c*c+d*d*d*d+m*m*m*m+e*e*e*e) { printf(\"%d\\n\"i); N++; } } if(N==0) printf(\"No output.\\n\"); return 0; } else if(n==5) { i=10000;j=99999; for(i=10000;i<=j;i++) { b=i/10000;c=(i%10000)/1000;d=(i%1000)/100;m=(i%10 0)/10;e=i%10; if(i==b*b*b*b*b+c*c*c*c*c+d*d*d*d*d+m*m*m*m*m+e*e*e*e* { printf(\"%d\\n\"i); N++; } } if(N==0) printf(\"No output.\\n\"); return 0; } else if(n==6) { i=100000;j=999999; for(i=100000;i<=j;i++) 44. 45. 46. 47. 48. 49. 50. 51. 52. { a=i/100000;b=(i%100000)/10000;c=(i%10000)/1000;d= (i%1000)/100;m=(i%100)/10;e=i%10; if(i==a*a*a*a*a*a+b*b*b*b*b*b+c*c*c*c*c*c+d*d*d*d*d*d+ m*m*m*m*m*m+e*e*e*e*e*e) 53. . 55. 56. { printf(\"%d\\n\"i); N++; } } if(N==0) printf(\"No output.\\n\"); return 0; } } 19.这是双重循环的入门题目,大家来看看,你会做吗? 输入 n 的值,输出如下例( n=4 )所示的由数字组成的正方型。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 输入: n 输出: 数字组成的正方型 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. #include int ni=1j=1m=1; scanf(\"%d\"&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf(\"%3d\"m); m++; } printf(\"\\n\"); } } 20.小明在中学会求一个数的 n 次方了,但计算机还不会,请你来编写一个程序吧。由于计算机比较“笨”,所以我们编写程序的功能不用太强,只要能算出 a 的 n 次方的最后 3 位数就可以了。 输入: a 和 n 的值。假设 a<=150 。 输出: 求 a 的 n 次方的最后 3 位数。 1. 2. 3. 4. 5. #include long int s=1; int ani=1t=1; 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. scanf(\"%d%d\"&a&n); if(n==0) printf(\"The last 3 numbers is 1.\\n\"); else { for(i=1;i<=n;i++) { s=(s*a)%1000; } t=s%1000; if(t>=0&&t<10) printf(\"The last 3 numbers is 00%d.\\n\"t); if(t>=10&&t<100) printf(\"The last 3 numbers is 0%d.\\n\"t); if(t>=100&&t<1000) printf(\"The last 3 numbers is %d.\\n\"t); } return 0; } 21.输入 n 的值,输出如下例( n=4 )所示的数字菱形。 4 434 43234 4321234 43234 434 4 输入: n 输出: 数字菱形 1. 2. 3. 4. 5. 6. 7. 8. 9. #include { int nijabcd; scanf(\"%d\"&n); for(i=1;i<=n;i++) { a=n;b=n-i+2; for(j=1;j<=(n-i);j++) { printf(\" \"); } for(j=(n-i+1);j<=n;j++) 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. { printf(\"%-2d\"a); a--; } for(j=n+1;j<=(n+i-1);j++) { printf(\"%-2d\"b); b++; } printf(\"\\n\"); } for(i=n+1;i<=(2*n-1);i++) { c=n;d=i-n+2; for(j=1;j<=(i-n);j++) { printf(\" \"); } for(j=i-n+1;j<=n;j++) { printf(\"%-2d\"c); c--; } for(j=n+1;j<=(3*n-i-1);j++) { printf(\"%-2d\"d); d++; } printf(\"\\n\"); } return 0; } 22. 请根据要求打印可空心倒三角形。 输入: 输入三角形的高度(h >0)。 输出: 打印相应的空心倒三角形 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. #include { for(j=1;j<=(2*n-1);j++) printf(\"*\"); printf(\"\\n\"); } for(i=2;i<=(n-1);i++) { { for(j=1;j<=(i-1);j++) printf(\" \"); 13. 14. 15. } printf(\"*\"); for(j=i+1;j<=(2*n-i-1);j++) 16. printf(\" \"); 17. printf(\"*\\n\"); 18. 19. } 20. if(i==n) 21. { 22. for(j=1;j<=(i-1);j++) 23. printf(\" \"); 24. printf(\"*\\n\"); 25. } 26. 27. } 23.输入: n。正方形的边长 输出: 边长为 n 的数字回形方阵。 1. #include 4. int a[20][20]ijnm=1lk=0; 5. scanf(\"%d\"&n); 6. l=n; 7. for(i=1;i<=(n+1)/2;i++) 8. { for(j=0;j 16. k=k+1; } 17. for(i=0;i<=n-1;i++) 18. { for(j=0;j<=n-1;j++) 19. printf(\"%3d\"a[i][j]); } } 20. printf(\"\\n\"); } 21.} 24.输入: 用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。 输出: 该数据的双精度表示 1. #include 5. { char a[N]b[N]; 6. int ijsqx; 7. gets(a); 8. x=strlen(a); 9. for(s=0q=1x--;'0'<=a[x]&&a[x]<='9';x--q*=10) 10. s=s+(a[x]-'0')*q; 11. if(a[x]=='-') 12. s=-s; 13. for(i=j=0;a[i]!=' ';i++) 14. { if(a[i]<='9'&&a[i]>='0') 15. { b[j]=a[i]; 16. j++; } 17. } 18. if(s<=0) 19. { for(i=s;i<=s+8;i++) 20. { if(i<0) printf(\"0\"); 21. if(i>=0&&i 26. { for(i=0;i<=s+8;i++) 27. { if(i 25.请输出满足以下条件的 n 位正整数的个数: 要求该n位整数的从高位开始前 1 位可以被 1 整除,前 2 位可以被 2*2 整除,前 3 位可以被 3*3 整除,前 4 位可以被 4*4 整除......。即该整数前 k 位都可被 k 平方整除。 例如:n=1,则符合条件的1位正整数为1~9,输出答案 9。n=2,符合条件的正整数为:12 16 20 24 28 32 36 40 44 48, 52 56 60 68 72 76 80 84 88 92 96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位 2 可以被1整除;前2位24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。 输入: n(0<=n<9) 输出: 符合该条件的n位正整数的数量 1. #include 5. static int a[30]b[30]nttempijk; 6. scanf(\"%d\"&n); 7. for(i=1;i<=n;i++) 8. { t=1; 9. for(j=1;j<30;j++) 10. { for(k=0;k<=9;k++) 11. { b[t]=a[j]*10+k; 12. if(b[t]%(i*i)==0&&b[t]>b[t-1]) t++; } 13. } 14. for(j=1;j<30;j++) 15. { a[j]=b[j];b[j]=0; } 16. t--; 17. } 18. printf(\"%d\\n\"t); 19.} 26.我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。 这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。 1. #include 4. long int pm=0pn=0s=0t=0w=1e=1p=0q=0; 5. int a[30]b[30]; 6. char m[30]n[30]; 7. int ijgkmax1=0max2=0flag=0; 8. scanf(\"%s%s\"mn); 9. for(i=0;m[i]!='\\0';i++) 10. { if(m[i]>='A'&&m[i]<'Z') 11. a[i]=m[i]-55; 12. if(m[i>='0']&&m[i]<='9') 13. a[i]=m[i]-48; 14. max1=max1<(a[i]+1)?(a[i]+1):max1; 15. max1=max1<2?2:max1; } 16. pm=i; 17. for(j=0;n[j]!=0;j++) 18. { if(n[j]>='A'&&n[j]<='Z') 19. b[j]=n[j]-55; 20. if(n[j]>='0'&&n[j]<='9') 21. b[j]=n[j]-48; 22. max2=max2<(b[j]+1)?(b[j]+1):max2; 23. max2=max2<2?2:max2; } 24. pn=j; 25. for(i=max1j=max2;i<=36&&j<=36;) 26. { p=0;q=0;w=1;e=1; 27. for(g=pm-1;g>=0;g--) 28. { p+=a[g]*w; 29. w=w*i; } 30. for(k=pn-1;k>=0;k--) 31. { q+=b[k]*e; 32. e=e*j; } 33. if(p 36. { flag=1; 37. printf(\"%s (baxxxxse %d) = %s (baxxxxse %d)\\n\"minj); 38. break; } 39. } 40. if(flag==0) 41. printf(\"%s is not equal to %s in any baxxxxse 2..36\\n\"mn); 42. return 0; 43.} 27.输入 每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。 输出 UPC的校验位 1. #include 5. int ijs1=0s2=0t; 6. int a[11]; 7. char b[6]c[6]; 8. scanf(\"%d\"&a[0]); 9. scanf(\"%s\"b); 10. scanf(\"%s\"c); 11. for(i=0j=1;i<5;i++j++) 12. a[j]=b[i]-48; 13. for(i=0j=6;i<5;i++j++) 14. a[j]=c[i]-48; 15. for(i=0;i<11;i++) 16. { if(i%2==0) 17. s1+=a[i]; 18. else 19. s2+=a[i]; 20. } 21. t=9-(s1*3+s2-1)%10; 22. printf(\"%d\\n\"t); 23. return 0; 24.} 28.输入 输入n组身份证号码,第一行为个数,以后每行为身份证号码。 输出 如果输入的身份证号码为15位,则将其升级为18位后显示输出;否则判断其是否为合法身份证号,并逐行输出。 1. #include 5. int iy; 6. int d[20]={7910584216379105842000}; 7. char e[11]={'1''0''X''9''8''7''6''5''4''3''2'}; 8. y=0; 9. for(i=0;i<=16;i++) 10. {y=y+(x[i]-48)*d[i];y=y%11;} 11. y=y%11; 12. return e[y]; 13.} 14.int main() 15.{ 16. int imjn; 17. char a[1000]b[20]; 18. scanf(\"%d\"&m); 19. for(i=1;i<=m;i++) 20. { scanf(\"%s\"&a); 21. n=strlen(a); 22. if((n!=15)&&(n!=18)) 23. {printf(\"Invalid\\n\");continue;} 24. if(n==15) 25. { for(j=0;j<=5;j++) b[j]=a[j]; 26. if(a[12]=='9'&&a[13]=='9'&&(a[14]=='6'||a[14]=='7'||a[ 14]=='8'||a[14]=='9')) 27. {b[6]='1';b[7]='8';} 28. else {b[6]='1';b[7]='9';} 29. for(j=8;j<=16;j++) b[j]=a[j-2]; 30. b[17]=ans(b); 31. b[18]='\\0'; 32. printf(\"%s\\n\"b); } 33. else if (a[17]==ans(a)) 34. printf(\"Valid\\n\"); 35. else printf(\"Invalid\\n\"); } 36. return 0; 37.} 29.输入: 输入的第一行是一个正整数,表示下面有几组数据需要计算。之后的每一行是两个十进制的正整数和一个运算符,每个整数可以由最多 500 个数字组成。运算符可以是加号或者减号。 输出: 对应着输入的每一行数据,输出计算的结果,每个结果占一行。 1. #include 2. #include 5. { char zsigna[N]; 6. int nijfxb[N]c[N]; 7. void add(int b[N]int c[N]int f); 8. void sub(int b[N]int c[N]int f); 9. scanf(\"%d%c\"&n&z); 10. for(;n>0;n--printf(\"\\n\")) 11. { gets(a); 12. x=strlen(a); 13. for(i=0;i 18. for(i--j=0;i>=0;i--j++) 19. b[j]=a[i]-'0'; 20. if(f 24.void add(int b[N]int c[N]int f) 25.{ int ird[N]; 26. for(i=0r=0;i 33.void sub(int b[N]int c[N]int f) 34.{ int irflagd[N]; 35. for(i=f-1flag=1;i>=0;i--) 36. { if(b[i]>c[i]) {flag=1;break;} 37. else if(b[i] 46. if(flag==-1) 47. { printf(\"-\"); 48. for(i=0r=0;i 51. { d[i]=d[i]+10; 52. r=-1; } 53. else r=0; } . } 55. for(i--;d[i]==0&&i>0;i--) 56. ; 57. for(;i>=0;i--) 58. printf(\"%d\"d[i]); 59.} 30.任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。 这道题可以尝试着用数组。 输入:自然数 n 输出:各位数字组成的最大数 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. #include char a[10000]; int x[10]={0}; scanf(\"%s\"a); int n=strlen(a); for(int i=0;i 年 月 日 N 输出: (年月日+N天后的)年.月.日 1. 2. 3. #include { int yearmonthdaynka[12]={312931303130313130313031}b[12]={312831303130313130313031} ; scanf(\"%d%d%d\\n\"&year&month&day); scanf(\"%d\"&n); for(k=n;k>0;k--) { if(year%400==0||(year%4==0&&year%100!=0)) { day++; if(day>a[month-1]) { month++; day=1; } if(month>12) { year++; month=1; } } else { day++; if(day>b[month-1]) { month++; day=1; } if(month>12) { year++; month=1; } } } printf(\"%d.%d.%d\\n\"yearmonthday); return 0; } 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 32. 小明手中有硬币,小红手中有若干张10元的纸币。已知 1 角硬币厚 1.8mm,5 角硬币厚 1.5mm,1 元硬币厚 2.0mm 。小红拿出若干张10元的纸币,小明要将 1 角的硬币放成一摞,将 5 角的硬币放成一摞,将 1 元的硬币放成一摞,如果 3 摞硬币一样高,且三摞硬币的金额之和正好等于小红要求的面值,则双方交换,否则没有办法交换。 输入: 小红希望交换几张10元的纸币 输出: 1 角的数量5 角的数量1元的数量 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. #include int ntxyz; scanf(\"%d\"&n); t=n*10; if(t%16!=0) printf(\"No change.\\n\"); else { t=t/16;x=t*10;y=t*12;z=t*9; printf(\"%d%d%d\\n\"xyz); } return 0; } 33.输入行数 n 和首数字字符,在屏幕上输出由数字围起的高和下底宽度均 n 的空心梯形。 要求:输出的数字是循环的,即输出数字 9 后再输出的数字是 0。 输入: 行数n 和首字符 输出: 空心梯形 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. #include for(j=1;j<=3*n-2;j++) { if(j==3*n-2) printf(\"%-d\"t); else printf(\"%-2d\"t); if(j<(3*n-1)/2) { if(t==9) t=0; else t++; } 14. 15. 16. 17. 18. 19. 20. 21. else if(j==(3*n-1)/2&&n%2==0) continue; else { if(t==0) t=9; else t--; } } printf(\"\\n\"); t=f; 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. for(j=1;j<=2*(i-1);j++) printf(\" \"); if(i==n) { for(j=1;j<=(n+1)/2;j++) { if(t==9) { t=0; printf(\"%-2d\"t); } else printf(\"%-2d\"++t); } for(j=1;j<=n/2;j++) { if(t==0&&n%2!=0) t=9; else if(j==1&&n%2==0) { if(j==n/2) printf(\"%-d\\n\"t); else printf(\"%-2d\"t); continue; } else t--; if(j==n/2) printf(\"%-d\\n\"t); else printf(\"%-2d\"t); } } else { if(t==9) { printf(\"0\"); for(j=1;j<=6*n-4*i-3;j++) printf(\" \"); printf(\"0\\n\"); for(i=2;i<=n;i++) { 50. 51. 52. 53. . 55. 56. 57. 58. t=0; } else { t++; printf(\"%-2d\"t); for(j=1;j<=6*n-4*i-4;j++) printf(\" \"); printf(\"%-d\\n\"t); } } } return 0; } 34.输入两个非负整数m,n(n>=m) 输出[m..n]区间的所有平方数之和。 例如: 输入: 49 输出: 13 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. #include int mnijN=0; scanf(\"%d%d\"&m&n); for(i=m;i<=n;i++) { for(j=0;j<=i;j++) { if(j*j==i) N=N+i; } } printf(\"%d\\n\"N); return 0; } 35.求满足下列不等式的最小 m。 1 + 2 + 3 + 4 + ...... + m ≥ n 例如:n=100,当 m =14 时,满足:1+2+3+4+...+13=91<100,而 1 +2+3+4+......+14=105>100。 输入:n 输出:m 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. #include int maxi=0sum=0; scanf(\"%d\"&max); while(sum 要求去掉每一个字符串中的元音字符:a,e,i,o,u,组成新的字符串输出出来。 若原字符串中没有上述字符,则输出原字符串。 例如: 输入: 2 my book you are boy! 输出: my bk y r by! 例如: 输入 1 Love 输出 Lv 1. 2. 3. 4. 5. 6. 7. 8. #include { int numijlenk; scanf(\"%d\"&num); getchar(); char ins[100][100]outs[100][100]; for(i=0;i { fflush(stdin); gets(ins[i]); len=strlen(ins[i]); for(j=0k=0;j =='I')||(ins[i][j]=='O')||(ins[i][j]=='U')||(ins[i][j]=='a')||(ins[i][j]=='e')||(ins[i][j]=='o')||(ins[i][j]=='i')||(ins[i][j]=='u')) { continue; } outs[i][k]=ins[i][j]; k++; } outs[i][k]=0; puts(outs[i]); } } 14. 15. 16. 17. 18. 19. 20. 37.输入两个非负整数m,n(n>=m) 输出[mn]区间里的平方数的个数 例如: 输入 49 输出 2 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. #include int nmijtotal=0; scanf(\"%d%d\"&m&n); for(i=m;i<=n;i++) { for(j=0;j<=n;j++) if(i==j*j) total++; } printf(\"%d\\n\"total); return 0; } 38.输入两个非负整数mn(位数不确定,n>=m) 给定一个字符串构成的文件名,对文件名进行批量改名。(扩展名须保持不变,且扩展名不仅限于MP3,扩充的位数以n的值为参照) 例如: 输入: 99103 music.MP3 输出 music099.MP3 music100.MP3 music101.MP3 music102.MP3 music103.MP3 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. #include { char s1[10000]; int pjmnlen; scanf(\"%d%d\"&m&n); gets(s1); len=strlen(s1); p=fun1(mn); while(m<=n) { for(j=0;j { printf(\"%0pd.\"m); m++;} } printf(\"%c\\n\"s1[len-1]); } return 0; } 39.在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫\"黑色星期五”。(建议你把之前的程序改为函数,这样,这道题就容易很多了) 输入: 年份 输出: 判断该年是否包含黑色星期五,如包含,给出具体日期 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. #include { int wyyearpyearmmonthk=0ca[12]i=0; scanf(\"%d\"&year); c=year/100; for(month=1;month<=12;month++) { if(month==1||month==2) { m=month+12; pyear=year-1; y=pyear%100; w=((c/4)-2*c+y+(y/4)+(26*(m+1)/10)+12)%7; } else { pyear=year%100; w=((c/4)-2*c+pyear+(pyear/4)+(26*(month+1)/10)+12)%7; } if(w==5) { k++; a[i]=month; i++; } } if(k==1) 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. printf(\"There is 1 Black Friday in year %d.\\nIt is:\\n%d/%d/13\\n\"yearyeara[0]); else { printf(\"There are %d Black Fridays in year %d.\\nThey are:\\n\"kyear); for(i=0;i 28. 29. return 0; } 40.有如下一组数字,其中每个数字都在 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 63 2 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 55 58 59 62 63 4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 36 37 38 39 44 45 46 47 52 53 55 60 61 62 63 8 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 63 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 48 49 50 51 52 53 55 56 57 58 59 60 61 62 63 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 55 56 57 58 59 60 61 62 63 现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。 输入: 程序的输入是一串以空白符分开的数字,当输入 0 时表示输入结束。 输出: 输出猜到的数字。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. #include { int a[7]mn=0ip=0; for(i=0;i<7;i++) { scanf(\"%d\"&a[i]); n++; if(a[i]==0) { break; } scanf(\" \"); } for(m=1;m<;m++) { p=0; for(i=0;i<(n-1);i++) { if(a[i]==1) { if(m==m/2*2) {p=1;break; } } if(a[i]==2) 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. { if(m%4!=3&&m%4!=2) {p=1;break; } } if(a[i]==3) { if(m%8!=4&&m%8!=5&&m%8!=6&&m%8!=7) {p=1;break; } } if(a[i]==4) { if(m%16!=8&&m%16!=9&&m%16!=10&&m%16!=11&&m%16!=12 &&m%16!=13&&m%16!=14&&m%16!=15) {p=1;break; } } if(a[i]==5) { if(m>31&&m<48||m<16) {p=1;break; } } if(a[i]==6) { if(m<32) {p=1;break; } } } if(p==0) { printf(\"%d\\n\"m); break; } } return 0; } 41.对于一个五位数a1a2a3a4a5,可将其拆分为三个子数: • • • sub1=a1a2a3 sub2=a2a3a4 sub3=a3a4a5 例如,五位数20207可以拆分成: • • • sub1=202 sub2=020(=20) sub3=207 现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。(重复性的代码建议写成函数) 输出时请按照由小到大的顺序排列(每行输出一个数)。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. #include { if((i*100+j*10+k)%n==0&&(j*100+k*10+l)%n==0&&(k*100+l*10+m) %n==0) printf(\"%d%d%d%d%d\\n\"ijklm); if(i==3) return 0; } return 0; } 42.输入 输入中将包括一系列的地图,每个地图的第一行有两个整数 n 和 m(0 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. #include char a[N][N]; int nmtijk=1; static int b[N][N]; for(m=n=1;n!=0&&m!=0;) { for(i=0;i scanf(\"%d %d\"&n&m); for(t=n;t>0;t--) scanf(\"%s\"a[n-t]); for(i=0;i { b[i][j]++;b[i+1][j]++;b[i+2][j]++;b[i ][j+1]++;b[i+2][j+1]++;b[i][j+2]++;b[i+1][j+2]++;b[i+2][j+2]++; } } } if(n!=0&&k>1) {printf(\"\\nField #%d:\\n\"k); k++; } else if(n!=0) {printf(\"Field #%d:\\n\"k); k++; } for(i=0;i 43.输入: 输入为一段文本,可以假设输入中不会出现数字、每行的长度不会超过 80 个字符,并且输入文本的大小不会超过 10M。 输出: 压缩后的文本。 1. 2. 3. 4. 5. 6. 7. 8. #include { char list[5000][30]={'\\0'}read[85]; char a[30]={'\\0'}; int j=0kn=0mflag=0l; for(;gets(read)!=NULL;) { if(read[0]=='\\0') 9. 10. 11. 12. 13. 14. 15. { printf(\"\\n\"); continue; } k=0; for(;read[k]!='\\0';) { for(;1;) { if((read[k]>=65&&read[k]<=90) || (read[k]>=97&&read[k]<=122)) { a[j]=read[k]; 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. k++j++; } if(read[k]=='\\0'&&a[0]=='\\0') break; j=0; for(m=0flag=0;m if(flag==0) { l=strlen(a); if(l==0) { printf(\"%c\"read[k]); k++; continue; } else { for(m=0;m { printf(\"%d\"m+1); l=strlen(a); for(m=0;m for(;read[k]!='\\0';) { if((read[k]>=65&&read[k]<=90) || (read[k]>=97&&read[k]<=122)) break; else { printf(\"%c\"read[k]); k++; } } } } printf(\"\\n\"); } } return 0; } 44.输入: 分别是起始点 a 和终止点 b 的编号。( a 和 b 在 1~100 之间,且 a方案数量。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. #include { int b[N]={0}; int c[N]={0}; int ijkna1a2tl; b[1]=1;c[1]=1; scanf(\"%d%d\"&a1&a2); n=a2-a1+1; for(j=3;j<=n;j++) { for(i=1;i 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. if(b[i]>=10) { l=1; b[i+1]=b[i+1]+1; b[i]=b[i]%10; } } } k=N; while(b[--k]==0){} for(i=k;i>=1;i--) printf(\"%d\"b[i]); printf(\"\\n\"); return 0; } 45.要求你使用指针,对一个输入的字符串数组进行排序,输出排序结果。 为了防止你回避指针,我们已经将函数声明和主函数都写好了,这样,你就不得不用指针才能完成任务了 例子很简单,就不给了 预设代码: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 1. 2. 3. 4. 5. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include /* run this program using the console pauser or add your own getch system(\"pause\") or input loop */ char *resort(char *a); int main(int argc char *argv[]) { char a[100]; gets(a); puts(resort(a)); return 0; } /* PRESET CODE END - NEVER TOUCH CODE ABOVE */ 代码: char *resort(char *a){ int ijplen; char m; for(len=0;*(a+len)!='\\0';len++) for(i=0;i<=len;i++) 6. 7. 8. 9. 10. 11. 12. 13. 14. { p=i; for(j=i+1;j<=len;j++) { if( *(a+p) > *(a+j) ) p=j; } m=*(a+i); *(a+i)=*(a+p); *(a+p)=m; } return a; } 46.要求,将两个已经排好顺序的字符串合并到一个字符串里 main函数和函数的定义已经写好了,你只能使用指针来完成了。 预设代码: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 1. 2. 3. 4. 5. 6. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include /* run this program using the console pauser or add your own getch system(\"pause\") or input loop */ int merge_sort(char *achar *bchar *c); int main(int argc char *argv[]) { char a[100]; char b[100]; char c[200]; gets(a); gets(b); merge_sort(abc); puts(c); return 0; } /* PRESET CODE END - NEVER TOUCH CODE ABOVE */ 代码: #include int merge_sort(char *achar *bchar *c){ int l1=strlen(a)l2=strlen(b); strncpy(cal1); strncpy(&c[l1]bl2); int ijp; 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. char m; for(i=0;i { m=c[i]; c[i]=c[p]; c[p]=m; } } for(i=l1+l2;i<200;i++) c[i]='\\0'; return 0; } 47.输入一个整数m,然后m个整数,构成一个数组 用一个指针数组分别指向这个数组的每一个元素 要求在不改变原始数组的顺序的情况下,对指针数组进行排序,将排序后的指针数组输出出来。 预设代码: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include /* run this program using the console pauser or add your own getch system(\"pause\") or input loop */ int resort(int *pa[]int num); int main(int argc char *argv[]) { int a[100]; int num; int *pa[100]; scanf(\"%d\"&num); int i=0; for(i=0;i { printf(\"%d\\n\"*pa[i]); } return 0; } /* PRESET CODE END - NEVER TOUCH CODE ABOVE */ 代码: int resort(int *pa[]int num) { int tempij; for(i=0;i<=num-1;i++) { for(j=i+1;j<=num-1;j++) { if(*pa[i]>*pa[j]) { temp=*pa[i]; *pa[i]=*pa[j]; *pa[j]=temp; } } } return 0; } 48.输入一个3*4的二维数组 对二维数组里面的每一行进行排序; 输出排序后的二维数组 预设代码: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include /* run this program using the console pauser or add your own getch system(\"pause\") or input loop */ int resort(int (*pa)[COL]int rowint col); int main(int argc char *argv[]) { int a[ROW][COL]; // int num; int (*pa)[COL]; int i=0j=0; for(i=0;i scanf(\"%d\"&a[i][j]); } pa=a; resort(aROWCOL); for(i=0;i 代码: int resort(int (*pa)[COL]int rowint col){ int ipjmn; for(n=0;n { m=(*pa)[i]; (*pa)[i]=(*pa)[p]; (*pa)[p]=m; } } } return 0; } 49.输入 输入的第一行是一个整数T(1 <= T <= 10),表示一共有T组用例。 每组用例的第一行为一个整数N(3 <= n <= 100),表示平面上点的个数。接下来的N行,每行包含两个用空格隔开的整数Xi和Yi(-1000 <= Xi Yi <= 1000),表示第i个点的坐标(Xi Yi)。 输出 每组用例输出一个数,表示最大的三角形的面积,结果保留一位小数。 输入样例 2 4 -1 1 1 1 1 -1 -1 -1 3 -1 -1 3 0 0 0 输出样例 2.0 1.5 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. #include { struct axis a[200]; int i=0numbernumjkt; double arealine1line2line3pcon; scanf(\"%d\"&num); for(t=0;t for(i=0;i ].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)); line2=sqrt((a[i].x-a[k].x)*(a[i].x-a[k].x) +(a[i].y-a[k].y)*(a[i].y-a[k].y)); line3=sqrt((a[k].x-a[j].x)*(a[k].x-a[j].x) +(a[k].y-a[j].y)*(a[k].y-a[j].y)); p=(line1+line2+line3)/2.0; 23. ; area=sqrt(p*(p-line1)*(p-line2)*(p-line3)) if(con24. 25. 26. 27. 28. 50.小明上大学了,学习上不怎么努力,居然还找了女朋友(叫小红吧,父母希望他好好学习,所以很生气),为了两人浪漫,不得不经常要买些小礼物,小零食,开销很大,家里又不是大款(父母生气了,所以实行银根紧缩。这个,你懂的)。为了小红,小明只好利用业余时间打工,挣零花钱。 小明除了上课之外,还要兼职打工。但是如果小明一天除了学习再算上打工的时间,一旦等于超过10个小时,他的女朋友就会因为他不能陪自己玩而不高兴,而且学习和工作的时间越长,就会越不高兴。 假设他的女朋友不会因为其它事不高兴,并且她的不高兴不会持续到第二天。(睡觉可以治疗爱生气的毛病吗?) 请你帮忙检查一下小明下周的日程安排,看看下周他的女朋友会不会不高兴;如果会的话,哪天最不高兴。 【输入】 输入包括 7 行数据,分别表示周一到周日的日程安排。每行包括两个非负整数,用空格隔开,分别表示小明在学校上课的时间和打工的的时间。 【输出】 输出只有一行,这一行只包含一个数字。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. #include { int ia[N]b[N]c[N]e=0; for(i=0;i<7;i++) { scanf(\"%d%d\"&a[i]&b[i]); c[i]=a[i]+b[i]; } for(i=0;i<7;i++) { if (c[i]>=10)e=1; } if(e!=0) { for(i=0;i<6;i++) { if(c[e-1] 16. } 51.幼儿园的小朋友们刚学习了如何数数,阿姨在下课时组织大家一起玩游戏。规则如下:所有的小朋友绕成一圈,顺序排号,从第一个小朋友开始报数,凡是报到固定数字(例如5)的,都退出该游戏,直到只剩下一位小朋友游戏才中止。 每个小朋友都希望自己能有更多的练习数数的机会,所以都希望成为最终被留下的那位。 现在,请大家帮小朋友们计算一下,在第一次排号的时候排到第几位才能成为最终被留下的小朋友。 输入: 小朋友的个数(<=50) 要被练习的数字 输出: 最终被留下的小朋友的序号 说明: 如“要被练习的数字”是5,则每次数到5的同学要退出该游戏 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. #include { int a[50]={0}inpmk=0q=0; scanf(\"%d %d\"&n&p); m=0; for(;m!=n-1;) { for(q=0;q { if(a[k]==0) q++; k++; if(k==n) k=0; } if(k==0) a[n-1]=1; else a[k-1]=1; m++; } for(i=1;i<=n;i++) { if(a[i-1]==0) break; } printf(\"The left child is NO %d.\\n\"i); return 0; } 52. 在中国,过春节时人们有给孩子压岁钱(粤语称为利是)的习俗。 最早的压岁钱出现于汉代,又叫压胜钱,并不在市面上流通,而是铸成钱币形式的玩赏物,有避邪的功能。钱币正面一般铸有“万岁千秋”、“去殃除凶”等吉祥话和龙凤、龟蛇、双鱼等吉祥图案。 据说嘉兴府有一户姓管的人家,夫妻老年得子,十分珍爱。在年三十晚上,为防止“祟”来侵扰一直逗孩子玩,小孩用红纸包了八枚铜钱,包了又拆,拆了又包,睡下以后,包着的八枚铜钱就放在枕边。半夜里,一阵阴风吹过,黑矮的小人正要用他的白手摸孩子的头,突然孩子枕边迸出一道金光,祟尖叫着逃跑了。 于是这件事传扬开来,大家纷纷效仿,在大年夜用红纸包上钱给孩子,祟就不敢再来侵扰了。因而人们把这种钱叫“压祟钱”,“祟”与“岁”发音相同,日久天长,就被称为 “压岁钱”了。 现在有 N 个人,他们都有小孩,春节来了,他们要发压岁钱给朋友的小孩,而他们自己的小孩也会收到压岁钱。为了简单,他们在发压岁钱的时候,使用以下的计算方法,譬如某甲有 100 块,它要给另外三个人的小孩发压岁钱,则每个小孩会分到 100/3 = 33 块,剩余的 1 块就不发了。 给你这 N 个人的信息,以及他们把压岁钱发给了谁的小孩,请你计算他们每个人的小孩收到的压岁钱和他们发出去的压岁钱的差额是多少。 输入 第 1 行:一个整数 N(2 <= N <= 10)第 2..N+1 行:每行是一个人名,每个名字不超过 14 个字符第 N+2..结束:N 组按照以下规则组织的数据: 组中的第一行为送出压岁钱的人名。 第二行包括两个数字,第一个是该人有多少钱(0~2000),第二个是它要把钱发给几个人的小孩,用 NGi 表示(0 ≤ NGi ≤ N-1). 如果 NGi 为非零,则下面的 NGi 行会列出接受压岁钱的人的名字。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. #include { char a[10][14]c[200][14]n; static int b[10]; int Nij=0tmoneymangiveqp; scanf(\"%d\"&N); scanf(\"%c\"&n); for(i=0;i 16. 17. 18. 19. 20. 21. 22. 23. } for(i=0;i j++; scanf(\"%d %d\"&money&man); scanf(\"%c\"&n); for(t=0;t { b[t]-=(money-money%man); give=(money-money%man)/man; } for(q=0;q for(t=0;t printf(\"%s %d\\n\"a[i]b[i]); } for(i=0;i 53.输入 输入包括多个测试用例,每个测试用例如下: 第一行包含两个数字 w l(0 我们约定,左上角的坐标为00,所有的坐标都是浮点型数字。 输出 一个浮点型数字,代表总路程,结果精确到小数点后 4 位。 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. #include double startxstartyendxendysumwidthlength; char str[10000]r; scanf(\"%lf%lf\"&width&length); scanf(\"%lf%lf\"&startx&starty); scanf(\"%lf%lf\"&endx&endy); scanf(\"%c\"&r); gets(str); len=strlen(str); for(i=0;i startx=2*width-startx; } length=(starty-endy)*(starty-endy); width=(startx-endx)*(startx-endx); sum=sqrt(length+width); printf(\"%.4lf\\n\"sum); 27. 28. . return 0; } 背景: 拱猪是一种很有趣的扑克牌游戏。即使你不知道它的玩法,你也可以由它的计分方式来了解它的趣味性。 假设在此我们仅考虑四个人的拱猪牌局,本题要求你根据下面的计分规则,在牌局结束时计算四位玩家所得分数。 1. 2. 我们分别以S、H、D及C来代表黑桃,红心,方块及梅花,并以数字1至 13来代 表A、2、…、Q、K等牌点,例如:H1为红心A,S13为黑桃K。 牌局结束时,由各玩家持有的有关计分的牌(计分牌)仅有S12(猪),所有红心牌, D11(羊)及C10(加倍)等16张牌。其它牌均弃置不计。若未持有这16张牌之任一张则以得零分计算。 若持有C10的玩家只有该张牌而没有任何其它牌则得+50分,若除了C10 还有其它 计分牌,则将其它计分牌所得分数加倍计算。 若红心牌不在同一家,则H1至H13等13张牌均以负分计,其数值为-50, -2,-3, -4,-5,-6,-7,-8,-9,-10,-20,-30,-40。而且S12与D11分别以-100及+100分计算。 若红心牌H1至H13均在同一家,有下列情形: 所有红心牌以+200分计算。 若S12、D11皆在吃下所有红心牌之一家,则此玩家得+500分。 而C10还是以前面所述原则计算之。 输入: 每个输入文件由多组测试数据构成,每组测试数据有四行,每一行第一个数为该玩家所持有计分牌总数,而后列出其所持有之所有计分牌,牌数与各计分牌均以一个以上的空格分开。相邻两组测试数据之间不会有空白行,读到四家持牌数都为 0 表示文件结束。 输出: 每一行输出一组测试数据对应的结果,依次输出各家所得分数,共四个整数 ( 含正负号,0 除外),相邻两个整数之间以一个空格分开,符号和数字间不可以有空格。每组输出间不需要有空白行。 3. 4. 5. • • • 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. #include int myinput(int card[]int number[]) { int in; char s[5]; for(i=0;i<4;i++) { scanf(\"%d\"&n); number[i]=n; while(n--) { scanf(\"%s\"s); switch(s[0]) 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. { case 'S':card[13]=i;break; case 'D':card[14]=i;break; case 'C':card[15]=i;break; case 'H':s[2]=='\\0'?(card[s[1]-'1']=i):(card[s[2]-'1'+10]=i); } } } return number[0]+number[1]+number[2]+number[3]; } int main() { int value[15]={-50-2-3-4-5-6-7-8-9-10-20-30-40-100100} card[16] score[4]={0000} number[4] is input(); while(myinput(cardnumber)) { for(i=0s=0;i<13;i++) s+=card[i]; if(s) { for(i=0;i<15;i++) score[card[i]]+=value[i]; } else { if(card[0]==card[13]&&card[13]==card[14]) score[card[0]]+=500; else { score[card[0]]+=200; score[card[14]]+=value[14]; score[card[13]]+=value[13]; } } score[card[15]]+=number[card[15]]==1?50:score[card[15]]; for(i=0;i<4;i++) printf(\"%s%d%s\"score[i]>0?\"+\":\"\"score[i]i==3?\"\\n\":\" \"); for(i=0;i<4;i++) score[i]=0; 46. 47. 48. } return 0; } 55.在指定的文本文件中包含了我需要的信息,请从指定文件中读取指定的行。如果文件中没有指定的行,则显示“Line No Error.”。如果文件不存在,则显示“File Name Error.”。 输入: 第一行为要以只读方式打开的文本文件名 第二行要读取的行号(从1开始) 输出: 文件中指定行号的内容(完整一行的内容) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. #include char name[20]s[20]; scanf(\"%s\"name); pf=fopen(name\"r\"); if(pf==NULL) { printf(\"File Name Error.\\n\"); exit(0); } scanf(\"%d\"&n); while(n--) { if(fgets(s20pf)==NULL) { pf=NULL;break; } } if(pf==NULL) printf(\"Line No Error.\\n\"); else printf(\"%s\"s); } 56.验证哥德猜想:任何大于4的偶数均可分解为两个素数之和(除1和本身以外没有其它约数的大于1的整数称为素数)。 编写程序,输入任意一个大于4的偶数,将其分解为两个素数之和,将这两个素数输出。 注意:对第一个加和项从小到大穷举,找到第一组符合条件的即输出。 输入:24↙ 输出:24=5+19↙ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. #include { printf(\"%d=%d+%d\\n\"xyz); return 0;} } } } 57.大写字母空心菱形 输入菱形的边长和起始字母,输出大写字母空心菱形。输出的字母是循环的,即递增到字母 'Z' 以后输出 'A'。 输入:4 D↙ 输出: D↙ E O↙ F N↙ G M↙ H L↙ I K↙ J↙ 1. 2. 3. 4. 5. 6. #include scanf(\"%d %c\"&a&b); d=b; 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. for(j=1;j<=a;j++) { for(i=1;i<=(a-j);i++) { printf(\" \"); } printf(\"%c\"(d-65)&+65); d=d+1; if(j==1) printf(\"\\n\"); else { for(k=1;k<=(2*(j-2)+1);k++) { printf(\" \"); } e=b+4*a-j-3; printf(\"%c\\n\"(e-65)&+65); } } for(j=a-1;j>0;j--) { for(i=1;i<=(a-j);i++) { printf(\" \"); } printf(\"%c\"(d-65)&+65); d=d+1; if(j==1) printf(\"\\n\"); else { for(k=1;k<=(2*(j-2)+1);k++) { printf(\" \"); } e=b+2*a-3+j; printf(\"%c\\n\"(e-65)&+65); } } return 0; } 58.请编写一个递归函数 reverse(char str[] int start int end ) ,该函数的功能是将串 str 中下标从 start 开始到 end 结束的字符颠倒顺序。假设 start 和 end 都在合理的取值范围。 例如: 执行前:str[]=\"0123456\";start=1 ;end=4 执行后:strr[]=\"0432156\" 要求在该函数中不使用新的数组,没有循环。 注意:只需要编写递归函数 reverse,系统中已经设置好了main函数 预设代码: 1. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 代码:1. 2. 3. 4. 5. 6. 7. 8. 9. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include void reverse( char*intint); int main( ) { char str[100]; int start end; gets(str); scanf(\"%d%d\" &start &end); reverse( str start end ); printf(\"%s\\n\" str); return 0; } /* PRESET CODE END - NEVER TOUCH CODE ABOVE */ /* PRESET CODE END - NEVER TOUCH CODE ABOVE */ void reverse(char *strint startint end) { if(end>=strlen(str)) end=strlen(str)-1; if(end-start>0) { char tmp=str[start]; str[start]=str[end]; str[end]=tmp; return reverse(strstart+1end-1); } } 因篇幅问题不能全部显示,请点此查看更多更全内容34. else if(p>q) j++; 35. else
Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务