第六次作业
1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
1 #include<stdio.h> 2 int main() 3 { 4 int num,a,b,c,d,sum; 5 printf("输入一个四位整数"); 6 for(num=1000;num<=9999;num++) 7 { 8 a=num/1000; 9 b=num/100%10; 10 c=num/10%10; 11 d=num%10; 12 sum=1000*d+100*c+10*b+a; 13 if(num==4*sum) 14 { 15 printf(" %4d",num); 16 } 17 } 18 19 return 0; 20 }
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
1 #include<stdio.h> 2 int main() 3 { 4 int num,s=0,i,x,sum=0; 5 6 printf("输入任意一个多位的数字"); 7 scanf("%d",&num); 8 9 while(num!=0) 10 { 11 s=num%10; 12 num=num/10; 13 x=x+s; 14 } 15 16 if(x<=0||x>=13) 17 { 18 printf("***"); 19 } 20 else if(x>=0&&x<=12) 21 { 22 23 switch(x) 24 { 25 case 1:printf("%dJanuary",x);break; 26 case 2:printf("%dFebruary",x);break; 27 case 3:printf("%dMarch",x);break; 28 case 4:printf("%dApril",x);break; 29 case 5:printf("%dMay",x);break; 30 case 6:printf("%dJune",x);break; 31 case 7:printf("%dJuly",x);break; 32 case 8:printf("%dAugust",x);break; 33 case 9:printf("%dSeptember",x);break; 34 case 10:printf("%dOctorber",x);break; 35 case 11:printf("%dNovember",x);break; 36 case 12:printf("%dDecember",x);break; 37 } 38 } 39 40 return 0; 41 }
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
此题可在pta网站注册提交测试。https://pta.patest.cn/pta/test/14/exam/4/question/796
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 int A,a,x,y,z,d,num; 6 printf("输入一位不超过6的整数"); 7 scanf("%d",&A); 8 a=A+4; 9 for(x=A;x<a;x++) 10 for(y=A;y<a;y++) 11 for(z=A;z<a;z++) 12 { 13 if(x!=y&&x!=z&&y!=z) 14 { 15 num=100*x+10*y+z; 16 printf(" %d",num); 17 d++; 18 if(d%6==0) 19 { 20 printf("\n"); 21 } 22 } 23 } 24 return 0; 25 }
4. 万年历、看商品猜价格、自动出题器、猜拳游戏。(完成个人选定的题目)
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 int main() 5 { 6 int a,b,c,i,j,k; 7 char x,y,Y; 8 do 9 { 10 printf("请输入商品的价格:\n"); 11 scanf("%d",&a); 12 srand(time(NULL)); 13 b=rand()%100+1; 14 for(i=1;i<=10;i++) 15 { 16 if(a!=b) 17 { 18 if(a>b) 19 { 20 printf("猜大了\n"); 21 scanf("%d",&a); 22 j=j+1; 23 } 24 else if(a<b) 25 { 26 printf("猜小了\n"); 27 scanf("%d",&a); 28 k=k+1; 29 } 30 } 31 if(a==b) 32 { 33 printf("猜对了,你一共猜错了%次",(j+k)); 34 } 35 } 36 printf("你一共猜错了%d次哦",(j+k-1)); 37 printf("继续下一轮吗?Y (y)or N(n)\n"); 38 scanf(" %c",&x); 39 }while(x=='Y'||x=='y'); 40 return 0; 41 } 42
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 int main() 5 { int a,b,c=0,e=1,s1=0,s2=0,i,i1,i2; 6 char x; 7 srand(time(NULL)); 8 do{ 9 10 b=rand()%3+1; 11 printf("第%d轮对决,请选择:1.石头,2.剪刀,3.布\n",e); 12 scanf("%d",&a); 13 if(a<=0||a>3) 14 { 15 printf("数据错误,重新输入!\n"); 16 } 17 else if(a==b) 18 { 19 c++; 20 e++; 21 printf("平局\n"); 22 } 23 else if((a==1&&b==3)||(a==2&&b==1)||(a==3&&b==2)) 24 { 25 s1++; 26 e++; 27 printf("你输了\n"); 28 } 29 else if((a==1&&b==2)||(a==2&b==3)||(a==3&b==1)) 30 { 31 s2++; 32 e++; 33 printf("你赢了\n"); 34 } 35 printf("继续下一轮吗?Y (y)or N(n)\n"); 36 scanf(" %c",&x); 37 } while(x=='y'||x=='Y'); 38 printf("对决次数%d平局%d次,电脑%d分,你%d分",e-1,c,s1,s2); 39 return 0; 40 }
附加题
有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的拼法如图所示:
1 #include<stdio.h> 2 int main() 3 { 4 int s1,s2,s3,a,b,sum; 5 for(a=0;a<=9;a++) 6 for(b=0;b<=9;b++) 7 { 8 switch(a) 9 { 10 case 0:s1=6;break; 11 case 1:s1=2;break; 12 case 2:s1=5;break; 13 case 3:s1=5;break; 14 case 4:s1=4;break; 15 case 5:s1=5;break; 16 case 6:s1=6;break; 17 case 7:s1=3;break; 18 case 8:s1=7;break; 19 case 9:s1=6;break; 20 } 21 switch(b) 22 { 23 case 0:s2=6;break; 24 case 1:s2=2;break; 25 case 2:s2=5;break; 26 case 3:s2=5;break; 27 case 4:s2=4;break; 28 case 5:s2=5;break; 29 case 6:s2=6;break; 30 case 7:s2=3;break; 31 case 8:s2=7;break; 32 case 9:s2=6;break; 33 } 34 sum=a+b; 35 switch(sum) 36 { 37 case 0:s3=6; break; 38 case 1:s3=2; break; 39 case 2:s3=5; break; 40 case 3:s3=5; break; 41 case 4:s3=4; break; 42 case 5:s3=5; break; 43 case 6:s3=6; break; 44 case 7:s3=3; break; 45 case 8:s3=7; break; 46 case 9:s3=6; break; 47 } 48 if(s1+s2+s3==12&&a<=9&&b<=9&&sum<=9) 49 { 50 printf("%d+%d=%d\n",a,b,sum); 51 } 52 } 53 return 0; 54 }
二、知识点总结(对顺序结构、选择结构、循环结构做综合总结)
1:利用穷举法,用多个循环叠加求出多个解得问题。
2:如果使一个数倒叙输出可以通过(x=x*10+?%10;?=?%10)得到
三、实验总结(实验中遇到的问题及解决方法)
1:虽然穷举法简单好用,但是有时候运算步骤过多,需要适当减短。
2:如果变量没有规律可以通过swtich语句解决,不要忘了加分号。
3:注意问题条件的范围大小,在输出结果往往会忽略这些细节。
4:没有什么困难是努力做不到的,如果做不出来,那说明不够用心。
5:C语言编译失败往往是因为小错误,看看是那里错了呢?
6:continue跳入上一个循环(勿?)。