码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-27 14:47:42      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

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;
}

 

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

标签:

原文地址:http://www.cnblogs.com/l20902/p/4679897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!