《算法竞赛入门经典》第二章习题

《算法竞赛入门经典》(第二版)第二章习题

水仙花数(daffodil)

输出100~999中的所有水仙花数。若3位数ABC=A³+B³+C³,则称其为水仙花数。例如153=1³+5³+3³,所以153是水仙花数。

#include
#include
int main()
{
    int a,b,c;
    for(int i=100;i<1000;++i)
    {
        a=i/100;
        b=i%10;
        c=i/10%10;
        
        if(pow(a,3)+pow(b,3)+pow(c,3)==i)
            printf("%d\n",i);
    }
    return 0;
}

韩信点兵(hanxin)

相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包括多组数据,每组数据包括3个非负整数a,b,c,表实每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告误解)。已知总人数不小于10,不超过100.输入到文件结束为止。

#include
int main()
{
    int a,b,c;
    int count = 1;
    while(~scanf("%d%d%d",&a,&b,&c))
    {
        bool flag=true;
        for(int i=10;i<=100;i++)
        {
            if(i%3==a && i%5==b &&i%7==c)
            {
                printf("case %d: %d\n",count++,i);              
                flag=false;
                break;
            }

        }
        if(flag)    printf("case %d: No answer\n",count++);
    }
}

倒三角形

输入正整数n≤20,输出一个n层的倒三角形。

#include
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=n;i>0;i--)
        {
            for(int j=0;j

子序列的和(subsequence)

输入两个正整数n

保留5位小数。输入包含多组数据,结束标记为n=m=0。

#include
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        if(n==0 && m==0)    break;
        double temp=0;
        int w=1;
        double sum=0;
        for(int i=n;i<=m;i++)
        {
            temp=(double)1/i/i;
            sum+=temp;
        }
        printf("Case %d: %.5f\n",w,sum);
    }
    return 0;
}

注意:该题中i*i可能会溢出,因此应该为temp=(double)/i/i;而不是temp=(double)/(i*i);


分数化小数

输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤10^6,c≤100。输入包含多组数据,结束标记为a=b=c=0。

#include
int main()
{
    int a,b,c;
    while(~scanf("%d%d%d",&a,&b,&c))
    {
        if(a==0 && b==0 && c==0)    break;
        double res = (double)a/b;
        printf("%.*llf\n",c,res);
    }
    return 0;
}

注意:%*.*f 表示域宽和精度从后面的变量列表中取值。

你可能感兴趣的:(《算法竞赛入门经典》第二章习题)