1、输入n值,输出如图所示的数字金字塔,如n=5的情况如下. 1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 12、编程,输出这样一个三位数,该三位数等于其每位数字的阶乘之和。 即: abc = a! + b! + c!3、编程,输入顶行字符c和高n,输出如下例(c=’A’,n=5)所示的图形。 A B B C C D D E E D D C C B B A第一题: #include <stdio.h>#include <conio.h>int main(){ int n,i,j; printf("input # of lines:"); scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=2*n-1;j++) { if(j<=n && n-j<i) printf("%d",i-(n-j)); else if(j>n && j-n<i) printf("%d",i-(j-n)); else printf("%c",' '); } putchar('\n'); } getch(); return 0;} 输入:9输出:input # of lines:9 1 121 12321 1234321 123454321 12345654321 1234567654321 12345678765432112345678987654321难点:中间的数就是高度,旁边的数逐一递减 第二题 #include <stdio.h>#include <conio.h>#include <assert.h>int main(){ int n,i; int arr[3]; void num2digits(int n, int *digits); int fac(int n); for(i=100;i<1000;i++) { num2digits(i,arr); if(i==fac(arr[0])+fac(arr[1])+fac(arr[2])) printf("%d\n",i); } getch(); return 0;}int fac(int n){ if(n>1) return fac(n-1)*n; else return 1;}void num2digits(int n, int *digits){ if(n>0) { digits[0]=n%10; num2digits(n/10,digits+1); }} 输出:145难点:递归算法两个子函数都用了递归 第三题: #include <stdio.h>#include <conio.h>int main(){ int n,i,j; char c; printf("input # of lines:"); scanf("%c%d",&c,&n); for(i=1;i<=n;i++) { for(j=1;j<=2*n-1;j++) { if(j<=n && n-j==i-1) printf("%c",(n-j)+c); else if(j>n && j-n==i-1) printf("%c",(j-n)+c); else printf("%c",' '); } putchar('\n'); } for(i=n-1;i>=1;i--) { for(j=1;j<=2*n-1;j++) { if(j<=n && n-j==i-1) printf("%c",(n-j)+c); else if(j>n && j-n==i-1) printf("%c",(j-n)+c); else printf("%c",' '); } putchar('\n'); } getch(); return 0;} 输入:A 5输出:input # of lines:A 20 A B B C C D D E E F F G G H H I I J J K K L L M M N N O O P P Q Q R R S ST T S S R R Q Q P P O O N N M M L L K K J J I I H H G G F F E E D D C C B B A此题跟第一题本质上是一样的就是输出的时候有差别

评论