《算法竞赛入门》-课后习题-Chapter 2

2-1 daffodil水仙花

#include <stdio.h>

int main()

{

    int i,a,b,c;

    for(i=100;i<=999;i++)

    {

        a=i/100;

        b=(i-a*100)/10;

        c=i-a*100-b*10;

        if(a*a*a+b*b*b+c*c*c==i)

            printf("%d\n",i);

        else continue;

    }

    return 0;

}

 

2-2 hanxin韩信

#include <stdio.h>

int main()

{int t,i,a,b,c;

    t=1;

    while(scanf("%d %d %d",&a,&b,&c)==3)

    {

        for(i=10;i<=100;i++)

        {

            if(i%3==a && i%5==b && i%7==c)

            {

               printf("case %d:%d\n",t,i);

               break;

            }

           if(i==100)

            printf("case %d:no answer\n",t);

        }

        t++;

    }

    return 0;

}

 

2-3 triangle倒三角形

#include <stdio.h>

int main()

{

    int n,i,k,t;

    scanf("%d",&n);

    for(i=1;i<=n;i++)

    {

        for(t=0;t<i-1;t++)

            printf(" ");

        for(k=0;k<2*n-(2*i-1);k++)

            printf("*");

        printf("\n");

    }

    return 0;

}

  

 

2-4 subsequence 子序列的和

#include <stdio.h>

int main()

{int i,n,m,t=1;

    double sum;



    while(scanf("%d %d",&n,&m))

    {

        if(m==0 && n==0) break;

        for(i=n,sum=0;i<=m;i++)

        {

            sum=sum+1.0/i/i;             //陷阱:当使用i*i时会出现结果溢出

        }

        printf("case %d:%.5lf\n",t,sum);

        t++;



    }

}

 

 

2-5 decimal 分数化小数

#include <stdio.h>

int main()

{

    int a,b,c;

    double k;while(scanf("%d %d %d",&a,&b,&c))

    {

        if(a==0 && b==0 && c==0) break;

        k=(double)a/b;

        printf("%.*lf\n", c, k);    // 难点,任意保留c位小数

    }

    return 0;

}

 

2-6 permutation 排列

思路:先给数组a[10]全部赋0,拆分每一位数,赋1。若不重复,则有a[1]+a[2]+...a[9]=9

#include <stdio.h>

int main(void)

{

    int x, y, z, a[10] = {0};

    for(x = 100; x < 333; x++)

    {

        y = 2*x;

        z = 3*x;

  

        a[x/100] = a[x/10%10] = a[x%10] = 1;

        a[y/100] = a[y/10%10] = a[y%10] = 1;

        a[z/100] = a[z/10%10] = a[z%10] = 1;

        int i, s = 0;

        for(i = 1; i < 10; i++)

            s += a[i];

        if(s == 9)

            printf("%d\t%d\t%d\n", x, y, z);

        for(i = 1; i < 10; i++)    

            a[i] = 0;

    }

    return 0;

}

 

你可能感兴趣的:(apt)