作业六
1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
#include<stdio.h> int main() { int a,b,c,d; float e,f; for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<=9;c++) for(d=1;d<=9;d++) { e=a*1000+b*100+c*10+d; f=d*1000+c*100+b*10+a; if (e/f==4) { printf("这两个四位数是%.f和%.f ",e,f); } } return 0; }
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
#include <stdio.h> int main() { int a,sum=0; printf("请输入一个整数:"); scanf("%d",&a); while(a) { sum = sum+a%10; a /= 10; } printf("%d",sum); if(sum>12) { printf(" ***"); } else { switch(sum) { case 1: printf(" January");break; case 2: printf(" February"); break; case 3: printf(" March"); break; case 4: printf(" April"); break; case 5: printf(" May"); break; case 6: printf(" June"); break; case 7: printf(" July"); break; case 8: printf(" August"); break; case 9: printf(" September"); break; case 10: printf(" October"); break; case 11: printf(" November"); break; case 12: printf(" December"); 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,e,f,g,h,m; printf("输入一个小于6的数字 "); scanf("%d",&a); if(a>6||a<=0) { printf("输入错误 "); } else { e=a+4; for(f=a;f<e;f++) for(g=a;g<e;g++) for(h=a;h<e;h++) { if(f!=g&&f!=h&&g!=h) { b=f*100+g*10+h; printf(" %d",b); m++; if(m%6==0&&m!=0) { printf(" "); } } } } return 0; }
4. 万年历、看商品猜价格、自动出题器、猜拳游戏。(完成个人选定的题目)我忘了选的哪个了....交两个吧~~~~
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int a,b,c=0,d=0,e=0,f=1,i,i1,i2; char x; srand(time(NULL)); do{ x='N'; b=rand()%3+1; printf("第%d轮对决,请选择:1.石头,2.剪刀,3.布 ",f); scanf("%d",&a); if(a<=0||a>3) { printf("数据错误,重新输入! "); } else if(a==b) { c++; f++; printf("平局 "); } else if((a==1&&b==3)||(a==2&&b==1)||(a==3&&b==2)) { d++; f++; printf("你输了 "); } else if((a==1&&b==2)||(a==2&b==3)||(a==3&b==1)) { e++; f++; printf("你赢了 "); } printf("继续下一轮吗?Y (y)or N(n) "); scanf(" %c",&x); } while(x=='y'||x=='Y'); printf("对决次数;%d,平局%d次,电脑得分%d,你得分%d",f-1,c,d,e); return 0; }
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int a,b,i; char x; do { printf("请输入价格 "); srand(time(NULL)); scanf("%d",&b); a=rand()%100+1; for(i=1;i<10;i++) {if(b>100||b<0) { printf("输入错误,请重新输入 "); scanf("%d",&b); } else {if(a==b) { printf("价格相等,商品是你的,价格就是%d元,你用了%d次。 ",a,i); break; } else if(a>b) { printf("价格错误了,你猜的太小了 "); scanf("%d",&b); } else { printf("价格错误了,你猜的太大了 "); scanf("%d",&b); } } } if(i==10&&a!=b) { printf("10次机会用完了,价格是%d元。 ",a); } printf("继续吗?y or n "); scanf(" %c",&x); } while(x=='y'); return 0; }
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() {int a,b,answer,d,result,i,i1=0,i2=0,i4=0,i6=0,m,n; float i3,i5; char x,z; srand(time(NULL)); do{ i2=0; for(i=1;i<=5;i++) { a=rand()%100+1; b=rand()%100+1; d=rand()%4+1; switch(d) { case 1:x='+';result=a+b;break; case 2:x='-';result=a-b;break; case 3:x='*';result=a*b;break; case 4:x='/';result=a/b;m=a%b; printf("%d %c %d=? ",a,x,b); printf("输入商和余数,用空格隔开: "); scanf("%d %d",&answer,&n); if(answer==result&&m==n) { printf("你答对了! "); i2++; i6++; } else { printf("你答错了,答案是:%d %c %d=商%d余%d ",a,x,b,result,m); } break; } if(d!=4){ printf("%d %c %d=? ",a,x,b); printf("输入答案: "); scanf("%d",&answer); if(answer==result) { printf("你答对了! "); i2++; i6++; } else { printf("你答错了,答案是:%d %c %d= %d ",a,x,b,result); } } i1++; } i3=(i2/(double)5)*100; printf("本次做对了%d道题,正确率%.2f%%",i2,i3); printf("继续吗?Y (y)or N(n) "); scanf(" %c",&z); }while(z=='y'||z=='Y'); i5=(i6/(double)i1)*100; printf("总共做了%d道题,做对了%d道,正确率是%.2f%%",i1,i6,i5); 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根火柴棍必须全部用上。
#include<stdio.h> int main() { int x,y,gen1,gen2,sum,gen3; for(x=0;x<=9;x++) for(y=0;y<=9;y++) { switch(x) { case 0: gen1=6; break; case 1: gen1=2; break; case 2: gen1=5; break; case 3: gen1=5; break; case 4: gen1=4; break; case 5: gen1=5; break; case 6: gen1=6; break; case 7: gen1=3; break; case 8: gen1=7; break; case 9: gen1=6; break; } switch(y) { case 0: gen2=6; break; case 1: gen2=2; break; case 2: gen2=5; break; case 3: gen2=5; break; case 4: gen2=4; break; case 5: gen2=5; break; case 6: gen2=6; break; case 7: gen2=3; break; case 8: gen2=7; break; case 9: gen2=6; break; } sum=x+y; switch(sum) { case 0: gen3=6; break; case 1: gen3=2; break; case 2: gen3=5; break; case 3: gen3=5; break; case 4: gen3=4; break; case 5: gen3=5; break; case 6: gen3=6; break; case 7: gen3=3; break; case 8: gen3=7; break; case 9: gen3=6; break; } if(gen1+gen2+gen3==12&&x<9&&y<9&&sum<9) { printf("%d+%d=%d ",x,y,sum); } } return 0; }
二、知识点总结:
1:穷举法的应用,利用多个循环,达成条件退出循环。
三、实验总结:
1:在循环中利用switch,可以方便对条件做出选择。
2:注意int double float的区别。
3:在循环中使用sum = sum+a%10; a /= 10;可以实现对输入整数的各位数字相加。
4:注意够位换行时“某++”的放置位置。
5:附加题要分清数字相加和火柴根数相加的区别以及联系。
6:循环嵌套时要注意限制条件。