1.有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。
#include <stdio.h> int main() { int a,b,c,d,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++) { if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d) { e=a*1000+b*100+c*10+d; f=d*1000+c*100+b*10+a; if(e==f*4) { printf("%d ",e); } } } return 0; }
总结:注意该四位的首项和末项不能是0
2.输入任意一个多位的数字,求各位数字之和。如果在【1,12】之内,则输出与和数字对应的月份的英文名称,否则输出***。
样例: 输入123, 输出 6 June
输入12345,输出 15 ***
#include <stdio.h> int main() { long n,m,sum=0; scanf("%ld",&n); while(n>0) { m=n%10; n=n/10; sum=sum+m; } switch(sum) { case 1:printf("1 January ");break; case 2:printf("2 February ");break; case 3:printf("3 March ");break; case 4:printf("4 April ");break; case 5:printf("5 May ");break; case 6:printf("6 June ");break; case 7:printf("7 July ");break; case 8:printf("8 August ");break; case 9:printf("9 September ");break; case 10:printf("10 October ");break; case 11:printf("11 November ");break; case 12:printf("12 December ");break; default :printf("%d *** ",sum);break; } return 0; }
总结:注意输出的数可能过大可以用long型
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,a,b,c,d,e=0,i=0; printf("请输入一个不超过6的正整数A "); scanf("%d",&A); if(A<0||A>6) { printf("Error "); } for(a=A;a<A+4;a++) for(b=A;b<A+4;b++) for(c=A;c<A+4;c++) { if(a!=b&&b!=c&&c!=a) { d=a*100+b*10+c; printf("%d ",d); i++; if(i%6==0) { printf("%d ",d); } } } return 0; }
总结:行末不能有空格换行的时候注意将空格清除
4.万年历
#include <stdio.h> int main() { int year,month,year1,month1,day=0,day1,maxday=0,maxday1,i,j; printf("请输入年月,用空格分开 "); scanf("%d%d",&year1,&month1); while(year1<1900||month1<1||month1>12) { printf("Error 请重新输入 "); scanf("%d%d",&year1,&month1); } for(year=1900;year<year1;year++) { if(year%4==0&&year%100!=0||year%400==0) { day=day+366; } else { day=day+365; } } for(month=1;month<month1;month++) { if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { maxday=maxday+31; } else if(month==4||month==6||month==9||month==11) { maxday=maxday+30; } else if(month==2) { if(year1%4==0&&year1%100!=0||year1%400==0) { maxday=maxday+29; } else { maxday=maxday+28; } } } day1=day+maxday; printf("%d ",day1%7); printf(" ********%d年%d月******** ",year1,month1); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六 "); switch(day1%7) { case 0: printf(" ");j=1;break; case 1: printf(" ");j=2;break; case 2: printf(" ");j=3;break; case 3: printf(" ");j=4;break; case 4: printf(" ");j=5;break; case 5: printf(" ");j=6;break; case 6: j=0;break; } if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { maxday1=31; } else if(month==4||month==6||month==9||month==11) { maxday1=30; } else if(month==2) { if(year1%4==0&&year1%100!=0||year1%400==0) { maxday1=29; } else { maxday1=28; } } for(i=1;i<=maxday1;i++) { printf(" %2d ",i); j++; if(j%7==0) { printf(" "); } } printf(" "); 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++) for(B=0;B<=9;B++) for(C=0;C<=9;C++) { switch(A) { case 0:a=6;break; case 1:a=2;break; case 2:a=5;break; case 3:a=5;break; case 4:a=4;break; case 5:a=5;break; case 6:a=6;break; case 7:a=3;break; case 8:a=7;break; case 9:a=6;break; } switch(B) { case 0:b=6;break; case 1:b=2;break; case 2:b=5;break; case 3:b=5;break; case 4:b=4;break; case 5:b=5;break; case 6:b=6;break; case 7:b=3;break; case 8:b=7;break; case 9:b=6;break; } switch(C) { case 0:c=6;break; case 1:c=2;break; case 2:c=5;break; case 3:c=5;break; case 4:c=4;break; case 5:c=5;break; case 6:c=6;break; case 7:c=3;break; case 8:c=7;break; case 9:c=6;break; } if(A+B==C&&a+b+c==12&&A!=B) { printf("%d+%d=%d ",A,B,C); } } return 0; }
总结:注意控制每个数字的火柴棍根数
知识点总结:
1.使用do while循环的时候要注意循环至少执行一次
2.好久没用switch语句了 总是忘了后面的break;
3.穷举法先进行内层循环 之后再进行外层循环
4.注意循环变量不要写混了
5.注意算式在循环中的先后顺序 两个数互换的时候不要忘记中间变量
6.注意while循环成立的条件
7.编程时先判断不符的情况,强制输出,若符合就执行,注意大括号内的语句
8.要注意空格的使用 ,输出字符后面,输入字符后边 少输入空格到最后找错不太容易
9.
m=0;
while(n!=0)
{
m=m*10+n%10;
n=n/10;
}
10.循环嵌套时一定注意变量的使用,尽量不要在两个循环体中使用同一个变量
11.有小数点要用float或者double