1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
# include <stdio.h> int main() { int a,b,c,d,e,i; for(i=4000;i<=10000;i++) { a=i%10; b=i/10%10; c=i/100%10; d=i/1000; e=a*1000+b*100+c*10+d; if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d) { if(i==e*4) { printf("%d",i); break; } } } return 0; }
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
# include <stdio.h> int main() { int a,sum=0; tt:printf("请输入任意一个多位数字: "); scanf("%d",&a); if(a<0) { printf("输入错误!!! "); goto tt; } else { while(a!=0) { sum=sum+a%10; a=a/10; } switch(sum) { case 1:printf("%d January",sum);break; case 2:printf("%d February",sum);break; case 3:printf("%d March",sum);break; case 4:printf("%d April",sum);break; case 5:printf("%d May",sum);break; case 6:printf("%d June",sum);break; case 7:printf("%d July",sum);break; case 8:printf("%d August",sum);break; case 9:printf("%d September",sum);break; case 10:printf("%d October",sum);break; case 11:printf("%d November",sum);break; case 12:printf("%d December",sum);break; default:printf("%d *** ",sum);break; } } return 0; }
3.给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。
输入格式:输入在一行中给出A。
输出格式:输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。
输入样例:2
输出样例:234 235 243 245 253 254
324 325 342 345 352 354
423 425 432 435 452 453
523 524 532 534 542 543
# include <stdio.h> int main() { int a,b,c,d,e,i=0; tt:printf("请输入一个不超过6的正整数 "); scanf("%d",&a); if(a>6||a<=0) { printf("输入数据错误!!! "); goto tt; } else { for(b=a;b<a+4;b++) { for(c=a;c<a+4;c++) { for(d=a;d<a+4;d++) { if((b!=c&&b!=d)&&d!=c) { e=b*100+c*10+d; i++; if(i%6!=0) { printf("%d ",e); } else { printf("%d ",e); } } } } } } return 0; }
4. 万年历、看商品猜价格、自动出题器、猜拳游戏。(完成个人选定的题目)
# include <stdio.h> # include <stdlib.h> # include <math.h> # include <time.h> int main() { int number; hh:printf("1.万年历 2.连续五道计算题 3.石头剪子布 4.猜价格 输入0结束 "); scanf("%d",&number); if(number==1) { system("cls"); int a,b,d,e=0,f,g=0,x,y=0,z,i; char c; do { printf("请输入日期,中间用空格隔开(只需输入年和月): "); gg:scanf("%d %d",&a,&b); if(a<1900||b<1||b>12) { printf("数据错误,重新输入 "); goto gg; } if((a%4==0&&a%100!=0)||a%400==0) { for(i=1900;i<a;i++) { if((i%4==0&&i%100!=0)||i%400==0) { y=y+1; } } d=366*y+365*(a-1900-y); for(i=1;i<b;i++) { if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) { e=e+31; } else if(i==4||i==6||i==9||i==11) { e=e+30; } else { e=e+29; } } } else { for(i=1900;i<a;i++) { if((i%4==0&&i%100!=0)||i%400==0) { y=y+1; } } d=366*y+365*(a-1900-y); for(i=1;i<b;i++) { if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) { e=e+31; } else if(i==4||i==6||i==9||i==11) { e=e+30; } else { e=e+29; } } } if(b==1||b==3||b==5||b==7||b==8||b==10||b==12) { x=d+e; f=x%7; printf("%d年%d月 ",a,b); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六 "); for(i=0;i<=f;i++) { printf(" "); g++; } for(i=1;i<=31;i++) { printf("%-2d ",i); g++; if(g!=0&&g%7==0) { printf(" "); } } } else if(b==4||b==6||b==9||b==11) { x=d+e; f=x%7; printf("%d年%d月 ",a,b); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六 "); for(i=0;i<=f;i++) { printf(" "); g++; } for(i=1;i<=30;i++) { printf("%-2d ",i); g++; if(g!=0&&g%7==0) { printf(" "); } } } else { if((i%4==0&&i%100!=0)||i%400==0) { x=d+e; f=x%7; printf("%d年%d月 ",a,b); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六 "); for(i=0;i<=f;i++) { printf(" "); g++; } for(i=1;i<=29;i++) { printf("%-2d ",i); g++; if(g!=0&&g%7==0) { printf(" "); } } } else { x=d+e; f=x%7; printf("%d年%d月 ",a,b); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六 "); for(i=0;i<=f;i++) { printf(" "); g++; } for(i=1;i<=28;i++) { printf("%-2d ",i); g++; if(g!=0&&g%7==0) { printf(" "); } } } } printf(" "); printf("是否继续,继续请输入G,结束请输入S "); scanf(" %c",&c); if(c=='G') { system("cls"); } }while (c=='G'); if(c=='S') { system("cls"); goto hh; } } else if(number==2) { system("cls"); int i,ia,ib,ic,id,ig,ih,ij=0,iq=0,ir,ix=0,iy=0,iz=0; char ie; do { ie='S'; iy=0; for(i=1;i<=5;i++) { srand(time(NULL)); ia=rand()%100+1; ib=rand()%100+1; ig=(rand()%100)/25+1; switch(ig) { case 1:printf("%d+%d=? 请输入答案 ",ia,ib); scanf("%d",&ic); ir=ia+ib; if(ic==ir) { printf("你很棒,做对了! "); iy++; iz++; } else { printf("做错了!,%d+%d=%d ",ia,ib,ir); iz++; } break; case 2: printf("%d-%d=? 请输入答案 ",ia,ib); scanf("%d",&ic); ir=ia-ib; if(ic==ir) { printf("你很棒,做对了! "); iy++; iz++; } else { printf("做错了!,%d-%d=%d ",ia,ib,ir); iz++; } break; case 3: printf("%d*%d=? 请输入答案 ",ia,ib); scanf("%d",&ic); ir=ia*ib; if(ic==ir) { printf("你很棒,做对了! "); iy++; iz++; } else { printf("做错了!,%d*%d=%d ",ia,ib,ir); iz++; } break; case 4:printf("%d/%d=? 请分别输入商和余数(用空格隔开) ",ia,ib); scanf("%d %d",&ic,&id); ir=ia/ib; ix==ia%ib; if(ic==ir&&id==ix) { printf("你很棒,做对了! "); iy++; iz++; } else { printf("做错了!,%d/%d=%d......%d ",ia,ib,ir,ix); iz++; } break; } } ij=ij+iy; iq=(double)ij/iz*100; ih=(double)iy/5*100; printf("本次一共做对了%d道题,正确率是%.2f%",iy,ih); printf("继续吗?Y or N "); if(iz>5) { printf("一共做了%d道题,做对了%d道题,正确率是%.2f%",iz,ij,iq); } scanf(" %c",&ie); }while(ie=='Y'); if(ie=='N') { system("cls"); goto hh; } } else if(number==3) { system("cls"); int a,b,x=0,y=0,z=0,i=1; char c; printf("----猜拳游戏---- "); do { tt:printf("第%d轮对决 ",i); printf("该你出拳了,请选择:1.石头2.剪刀3.布 "); scanf("%d",&a); if(a<1||a>3) { printf("输入数据错误,请重新输入! "); goto tt; } srand(time(NULL)); b=(rand()%100-2)/33+1; if(a==1) { if(b==1) { printf("电脑出石头 你出石头 "); printf("结果:平局,加油啊! "); x++; } else if(b==2) { printf("电脑出剪刀 你出石头 "); printf("结果:运气真好,你赢了!"); z++; } else { printf("电脑出布 你出石头 "); printf("结果:运气不太好哦,你输了! "); y++; } i++; printf("继续下一轮吗?Y(y)orN(n) "); scanf(" %c",&c); } else if(a==2) { if(b==1) { printf("电脑出石头 你出剪刀 "); printf("结果:运气不太好哦,你输了! "); y++; } else if(b==2) { printf("电脑出剪刀 你出剪刀 "); printf("结果:平局,加油啊!"); x++; } else { printf("电脑出布 你出剪刀 "); printf("结果:运气真好,你赢了! "); z++; } i++; printf("继续下一轮吗?Y(y)orN(n) "); scanf(" %c",&c); } else { if(b==1) { printf("电脑出石头 你出布 "); printf("结果:运气真好,你赢了! "); z++; } else if(b==2) { printf("电脑出剪刀 你出布 "); printf("结果:运气不太好哦,你输了!"); y++; } else { printf("电脑出布 你出布 "); printf("结果:平局,加油啊! "); x++; } i++; printf("继续下一轮吗?Y(y)orN(n) "); scanf(" %c",&c); } }while(c=='y'||c=='A'); i=i-1; printf("你选择了退出游戏! "); printf("对决战况: "); printf("对决次数:%d 平局次数:%d 电脑得分:%d 你得分:%d ",i,x,y,z); if(y>z) { printf("最终结果:你输了! "); } else if(y==z) { printf("最终结果:平局! "); } else { printf("最终结果:你赢了! "); } if(c=='N'||c=='n') { system("cls"); goto hh; } } else if(number==4) { system("cls"); int a,i,result; char b; srand(time(NULL)); a=rand()%100+1; do { for(i=1;i<=10;i++) { printf("你猜商品的价格是多少: "); scanf("%d",&result); if(a==result) { printf("恭喜你猜对了!!! "); exit(0); } else { printf("运气不太好哦!猜错了。你还有%d次机会 ",10-i); } } printf("如果继续请输入G,结束请输入S "); scanf(" %c",&b); }while(b=='G'); if(b=='S') { system("cls"); goto hh; } } else if(number==0) { exit(0); } return 0; }
附加题
有16根火柴,可以拼出多少个形如“A+B=C”的等式,A、B、C是用火柴棍拼出的整数,且为一位数,输出该等式形式。
注意: 1. 加号与等号各自需要两根火柴棍 2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0) 3. 16根火柴棍必须全部用上
用火柴棍拼数字0-9的拼法如图所示:
# include <stdio.h> int main() { int a,b,c,A,B,C; for(a=0;a<9;a++) { if(a==1) { A=2; } else if(a==2||a==3||a==5) { A=5; } else if(a==4) { A=4; } else if(a==6||a==9||a==0) { A=6; } else if(a==7) { A=3; } else { A=7; } for(b=0;b<9;b++) { if(b==1) { B=2; } else if(b==2||b==3||b==5) { B=5; } else if(b==4) { B=4; } else if(b==6||b==9||b==0) { B=6; } else if(b==7) { B=3; } else { B=7; } for(c=0;c<9;c++) { if(c==1) { C=2; } else if(c==2||c==3||c==5) { C=5; } else if(c==4) { C=4; } else if(c==6||c==9||c==0) { C=6; } else if(c==7) { C=3; } else { C=7; } if(a+b==c&&A+B+C==12) { printf("%d+%d=%d ",a,b,c); } } } } return 0; }
知识点总结:
1.熟练运用循环嵌套;
2.分情况合理运用if与switch;
3.我个人认为在判断输入数据合法性性时,如果不满足条件可以用goto让程序自动跳到开头位置,就不用在关了从新开了;
4.清屏system("cls");
5.清除缓存区fflush(stdin);
实验总结:
1.循环的连环嵌套适合解决一些需要分层次计算的问题;
2.我感觉goto在很多时候都有不错的用处,随心所欲,想跳哪就跳哪......(看情况用吧,自己别乱了就行);
3.尽可能的简化自己的程序。