《算法竞赛入门经典》第2章习题总结

本文涵盖了编程领域的基础知识,包括但不限于编程工具、开发环境、数据结构、算法、测试、运维等核心概念,旨在帮助读者深入理解并掌握编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

习题2-1 位数(digit)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n, count = 0;
    scanf("%d\n", &n);
    while(n > 0)
    {
        n = n / 10;
        count += 1;
    }
    printf("%d\n", count);
    return 0;
}

习题2-2 水仙花数(daffodil)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, c, n;
    for(n=100; n <= 999; n++)
    {
        c = n % 10;
        b = (n / 10) % 10;
        a = n / 100;
        if(n == a*a*a + b*b*b + c*c*c)
        {
            printf("%d\n", n);
        }
    }
    return 0;
}

习题2-3 韩信点兵(hanxin)

#include <stdio.h>

int main()
{
    int n, a, b, c;
    scanf("%d%d%d\n", &a, &b, &c);
    for(n=10;n<=100;n++)
    {
        if(n%3==a && n%5==b && n%7==c)
            printf("%d\n", n);
    }
    if(n==101)
    {
        printf("No answer\n");
    }
    return 0;
}

习题2-4 倒三角形(triangle)

#include <stdio.h>

int main()
{
    int i, j, k, n;
    scanf("%d\n", &n);
    for(i=n;i>0;i--)
    {
        for(j=0;j<n-i;j++)
        {
            printf(" ");
        }
        for(k=2*(i-1)+1;k>0;k--)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

习题2-5 统计(stat)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, a, m, n;
    scanf("%d%d\n", &n, &m);
    for(i=1;i<=n;i++)
    {
        scanf("%d\n", &a);
        if(a < m)
        {
            printf("%d\n",a);
        }
    }
    return 0;
}

习题2-6 调和级数(harmony)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, n;
    double sum = 1.0;
    scanf("%d\n", &n);
    for(i=2;i<=n;i++)
    {
        sum += (1.0/n);
    }
    printf("%.3lf\n", sum);
    return 0;
}

习题2-7 近似计算(approximation)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int t=-1;
    double n=1.0, sum=1.0;
    while(fabs(n)>=0.000001)
    {
        n = 1.0/(n+2);
        n = t*n;
        sum += n;
        t = (-1)*t;
    }
    printf("%.3lf\n", sum);
    return 0;
}

习题2-8 子序列的和(subsequene)

#include <stdio.h>

int main()
{
    int i, n, m;
    double sum=0;
    scanf("%d%d", &n, &m);
    if(n <= 1000000 && m <= 1000000)
    {
        for(i=n;i<=m;i++)
        {
            sum = sum + 1.0/(n*n);
        }
        printf("%.5lf\n", sum);
    }
    return 0;
}

习题2-9 分数化小数(decimal)

#include <stdio.h>

int main()
{
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    if(a <= 1000000 && b <= 1000000 && c <= 100)
    {
        printf("%.*lf\n", c, (double)a/b);
    }
    return 0;
}

习题2-10 排列(permutation)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, c, d, e, f, g, h, i, m, n, s;
    for(a=1;a<=9;a++)
    {
        for(b=1;b<=9;b++)
        {
            for(c=1;c<=9;c++)
            {
                for(d=1;d<=9;d++)
                {
                    for(e=1;e<=9;e++)
                    {
                        for(f=1;f<=9;f++)
                        {
                            for(g=1;g<=9;g++)
                            {
                                for(h=1;h<=9;h++)
                                {
                                    for(i=1;i<=9;i++)
                                    {
                                        m=100*a+10*b+c;
                                        n=100*d+10*e+f;
                                        s=100*g+10*h+i;
                                        if((2*m==n)&&(3*m==s)&&(a!=b)&&(a!=c)&&(a!=d)&&(a!=e)&&(a!=f)&&(a!=g)&&(a!=h)&&(a!=i)&&(b!=c)&&(b!=d)&&(b!=e)&&(b!=f)&&(b!=g)&&(b!=h)&&(b!=i)&&(c!=d)&&(c!=e)&&(c!=f)&&(c!=g)&&(c!=h)&&(c!=i)&&(d!=e)&&(d!=f)&&(d!=g)&&(d!=h)&&(d!=i)&&(e!=f)&&(e!=g)&&(e!=h)&&(e!=i)&&(f!=g)&&(f!=h)&&(f!=i)&&(g!=h)&&(g!=i)&&(h!=i))
                                        {
                                            printf("%d %d %d\n", m, n, s);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值