正文

简单练习题 帮网友做下2009-12-08 22:17:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/shenjinggege/50293.html

分享到:

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此题跟第一题本质上是一样的就是输出的时候有差别

阅读(1234) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册