第六次作业
1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
#include<stdio.h> int main() { int a,b,c,d,m,n; for(a=1;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<=9;c++) for(d=1;d<=9;d++) { m=a*1000+b*100+c*10+d; n=d*1000+c*100+b*10+a; if(n==m*4&&a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d) { printf("%4d的4倍是%4d\n",m,n); } } return 0; }
![](https://images2015.cnblogs.com/blog/1032137/201611/1032137-20161109111805280-191556784.png)
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
#include<stdio.h> int main() { int i,sum=0; printf("请输入一个多位数:\n"); scanf("%d",&i); while(i>0) { sum=sum+i%10; i=i/10; } printf("%d\n",sum); switch(sum) { case 1:printf("January\n");break; case 2:printf("February\n");break; case 3:printf("March\n");break; case 4:printf("April\n");break; case 5:printf("May\n");break; case 6:printf("June\n");break; case 7:printf("July\n");break; case 8:printf("August\n");break; case 9:printf("September\n");break; case 10:printf("October\n");break; case 11:printf("November\n");break; case 12:printf("December\n");break; default:printf("***\n"); } 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,i,m,num=0; printf("请输入一个不超过6的正整数:\n"); scanf("%d",&i); while(1) { if(i<=0||i>6) { printf("输入错误,请重新输入\n"); scanf("%d",&i); continue; } else { for(a=i;a<i+4;a++) for(b=i;b<i+4;b++) for(c=i;c<i+4;c++) { if(a==b||b==c||a==c) { continue; } else { m=a*100+b*10+c; printf("%d",m); num++; if(num%6!=0) { printf(" "); } else { printf("\n"); } } } break; } } return 0; }
4. 万年历、看商品猜价格、自动出题器、猜拳游戏。(完成个人选定的题目)
看商品猜价格
#include <stdio.h> #include <stdlib.h> #include <time.h> int main () { int a,price,num; char c; do { srand(time(NULL)); a=rand()%100; printf("请猜商品价格,在1-100之间:\n"); for(num=1;num<=10;num++) { scanf("%d",&price); if(a>price) { printf("猜小了啦\n"); } else if(a<price) { printf("猜大了啦\n"); } else { printf("恭喜你,猜对了,你猜了%d次\n",num); break; } } if(num==11&&a!=price) { printf("你一共猜了10次,都没猜对,这个数是%d\n",a); } printf("是否继续下一次游戏?Y(y)orN(n)\n"); scanf(" %c",&c); }while(c=='y'||c=='Y'); 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,a1,b1,c1,m; for(a=0;a<=9;a++) for(b=0;b<=9;b++) { switch(a) { case 0:a1=6;break; case 1:a1=2;break; case 2:a1=5;break; case 3:a1=5;break; case 4:a1=4;break; case 5:a1=5;break; case 6:a1=6;break; case 7:a1=3;break; case 8:a1=7;break; case 9:a1=6;break; } switch(b) { case 0:b1=6;break; case 1:b1=2;break; case 2:b1=5;break; case 3:b1=5;break; case 4:b1=4;break; case 5:b1=5;break; case 6:b1=6;break; case 7:b1=3;break; case 8:b1=7;break; case 9:b1=6;break; } c=a+b; switch(c) { case 0:c1=6;break; case 1:c1=2;break; case 2:c1=5;break; case 3:c1=5;break; case 4:c1=4;break; case 5:c1=5;break; case 6:c1=6;break; case 7:c1=3;break; case 8:c1=7;break; case 9:c1=6;break; } if(c>9) { continue; } m=a1+b1+c1; if(m==12) { printf("%d+%d=%d\n",a,b,c); } } return 0; }
二、知识点总结
1.第一题用穷举法的话要知道循环是先循环内层,循环完之后在外层;
2.第二题是先循环后选择,出现了几到几输出啥的就要考虑switch语句了;
3.第三题也用到了穷举法,还有就是输出时够6个换行且没有空格,那就不能按之前的在%d之后加空格了,应该来一个判断个数与6取余的结果是0输出\n 不是0输出空格;
4.看商品猜价格这个要有随机值,是否进行下一轮游戏这个用到了do,while要先执行一次在判断
5.附加题注意输出的a b c都是一位数,尤其是c这个要在switch完了之后判断,算a b c火柴棍的总和时要减去= +这两用的。
三、实验总结
1.写每个程序之前要想好基本框架在纸上大概写一遍,然后在电脑上调试运行;
2.要注意各种结构的综合应用;
3.一般实验出错都是标点还有字母和变量是否对应还有就是你编的顺序错误;
4.要细心不要忘了加‘;(英文版的)’。