《算法竞赛入门经典 第2版》-- 第2章习题

本文展示了C/C++实现的一些基础算法,包括绘制倒三角形、找出水仙花数、计算特定子序列的和、将分数转换为小数以及生成特定排列。每个算法都有清晰的代码实现,适合初学者理解与学习。同时,还包含了一个韩信点兵问题的解决方案。
摘要由CSDN通过智能技术生成

#本文的排版是根据我当时做题目的顺序来进行的

#在制作本文时,仍处于小白阶段,优势在于代码较简单、易明白,但没有厉害的逻辑思路和算法

# 若有其他意见或者是不同想法,欢迎交流(如果你觉得不错的话,记得随手点个赞哦~谢谢啦~)

1.倒三角形(triangle)

#include "stdio.h"

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

2.水仙花数(daffodil)

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

int main()
{
    int i,j;
    for (i=100;i<=999;i++)
    {
        if (pow(i%10,3)+pow(i/10%10,3)+pow(i/100%10,3)==i)
        printf("%d\n",i);
    }
    return 0;
}

3. 子序列的和

#include "stdio.h"

int main()
{
    double a,b,sum=0;
    int i,j=1;
    scanf("%lf%lf",&a,&b);
    while (a!=0||b!=0)
    {
        for(i=a;i<=b;i++)
        {
            sum = sum + 1.0/i/i;      //1.0/(i*i) 乘法会溢出  
        }
        printf("Case %d:%.5lf",j++,sum);
        scanf("%lf%lf",&a,&b);
    }
    return 0;
}

4.分数化小数

#include "stdio.h"

int main()
{
    int a,b,c,kase=0;
    double m;
    scanf("%d%d%d",&a,&b,&c);
    while (a!=0&&b!=0&&c!=0)
    {
        printf("Case %d:%.*f",++kase,c,(double)a/b);
        scanf("%d%d%d",&a,&b,&c);
    }
    return 0;
}

5.排列

#include <stdio.h>

int main()
{
    int abc,def,ghi;
    int i,k,a[9],word =1;
    for (abc=123;abc<=329;abc++)
    {
        def = abc * 2;
        ghi = abc * 3;
        a[0]=abc%10;a[1]=abc/10%10;a[2]=abc/100;
        a[3]=def%10;a[4]=def/10%10;a[5]=def/100;
        a[6]=ghi%10;a[7]=ghi/10%10;a[8]=ghi/100;
        for (k=0;k<9;k++)
        {
            word = 1;
            for (i=0;i<9&&i!=k;i++)
            {
                if (a[k]==a[i]||a[i]==0)
                {
                    word = 0;
                    break;
                }
            }
            if (word == 0)
            break;
        }
        if (word)
        printf("%d,%d,%d\n",abc,def,ghi);
    }
}

 6.韩信点兵

#include <stdio.h>

int main()
{
    int a,b,c,min,kase=0,word = 0;
    scanf("%d%d%d",&a,&b,&c);
    int i;
    for (i=10;i<=100;i++)
    {
        if (i%3==a&&i%5==b&&i%7==c)
        min = i;
        else 
        word = 1;
    }
    if (word)
    printf("No answer");
    else
    printf("Case %d:%d",++kase,min);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值