算法竞赛入门【码蹄集新手村600题】(MT1240-1260)C语言

算法竞赛入门【码蹄集新手村600题】(MT1240-1260)C语言

  • 目录
    • MT1241 大数
    • MT1242 三个非负整数
    • MT1243 四个正整数
    • MT1244 减到0
    • MT1245 五年花光
    • MT1246 存入的钱
    • MT1247 存10年钱
    • MT1248 吃桃
    • MT1249 练兵
    • MT1250 阶梯
    • MT1251 百钱买百猫
    • MT1252 自除数
    • MT1253 区间自除数
    • MT1254 最大自除数
    • MT1255 最小自除数
    • MT1256 最小数
    • MT1257 被3整除的五位数
    • MT1258 特殊整数
    • MT1259 统计哈沙德数
    • MT1260 袋鼠躲猫猫

在这里插入图片描述
码蹄集网站地址:https://www.matiji.net/exam/ojquestionlist


目录

MT1241 大数

(1)题目
输入一个数字N,编写一个程序,用该数字的所有数字重组一个最大数字。不考虑负数,0等特殊情况。注意:给定的数字可能非常大,因此输入被视为字符串。


格式

输入格式:
输入字符串


输出格式:
输出字符串

样例1

输入:
38293367

输出:
98763332

(2)参考代码

#include
#include
int main() 
{ 
    char a[100];
    scanf("%s", a);
    for (int i=9;i>=0;i--)
    {
        for (int j=0;j<strlen(a);j++)
        {
            if (a[j] == i + '0')
            {
                printf("%c", a[j]);
            }
        }
    }
    return 0; 
}

MT1242 三个非负整数

(1)题目
给定一个正整数N,将其分解为3个非负整数的累加和,并统计出这样做的方法数。比如2,有2种分解方法:

0 + 0 + 2 = 2 (0 + 2 + 0 = 2  2 + 0 + 0 = 2 可以和左边等式看做同一种)

0 + 1 + 1 = 2 (1 + 1 + 0 = 2  1 + 0 + 1 = 2 可以和左边等式看做同一种)


格式

输入格式:
输入整型


输出格式:
输出整型

样例1

输入:
3

输出:
3

(2)参考代码

#include
int main() 
{ 
    int N, count = 0;
    scanf("%d", &N);
    for (int i=0;i<=N;i++)
    {
        for (int j=i;j<=N;j++)
        {
            if (N - i - j >= j)
            {
                count++;
            }
        }
    }
    printf("%d", count);
    return 0; 
}

MT1243 四个正整数

(1)题目
输入一个正整数N,计算将N表示为四个正整数之和(比如5= 1+1+1+2)的可能方法的数量。


格式

输入格式: 
输入整型

输出格式: 
输出整型

样例1

输入格式: 
41

输出格式: 
511

(2)参考代码

#include
int main() 
{ 
    int N, count = 0;
    scanf("%d", &N);
    for (int i=1;i<=N;i++)
    {
        for (int j=i;j<=N;j++)
        {
            for (int k=j;k<=N;k++)
            {
                if (N - i - j - k >= k)
                {
                    count++;
                }
            }
        }
    }
    printf("%d", count);
    return 0; 
}

MT1244 减到0

(1)题目
输入两个正整数A和B,重复从较大整数中减去较小整数直到其中一个变为0,输出所需的步骤数。比如5和13。(5,13)->(5,8)->(5,3)->(2,3)->(2,1)->(1,1)->(1,0)一共需要减6次。不考虑不合理的输入等特殊情况。


格式

输入格式:
输入整型,空格分隔。


输出格式:
输出整型

样例1

输入:
5 15

输出:
3

(2)参考代码

#include
int main() 
{ 
    int a, b, count = 0;
    scanf("%d %d", &a, &b);
    while (a != 0 && b != 0)
    {
        if (a >= b)
        {
            a = a - b;
        }
        else
        {
            b = b - a;
        }
        count++;
    }
    printf("%d", count);
    return 0; 
}

MT1245 五年花光

(1)题目
银行利息月息为0.553%。某人五年中每年年底都取出1000元,到第五年时刚好取完。求存入的钱应是多少?


格式

输入格式: 
无

输出格式: 
输出实型,保留2位小数。

样例1

输入格式: 
无

输出格式: 
4140.47

(2)参考代码

#include
int main() 
{ 
    double n = 0, rate = 12 * 0.00553;
    for (int i=0;i<5;i++)
    {
        n = (n + 1000) / (1 + rate);
    }
    printf("%.2lf", n);
    return 0; 
}

MT1246 存入的钱

(1)题目
假设银行利息月息为0.63%。某人将一笔钱存入银行,打算在今后五年中每年年底都取出1000元,到第五年时刚好取完。求存入的钱应是多少?


格式

输入格式: 
无

输出格式: 
输出实型,保留2位小数。

样例1

输入格式:
无

输出格式:
4039.44

(2)参考代码

#include
int main() 
{ 
    double n = 0;
    for (int i=1;i<=5;i++)
    {
        n += 1000;
        n =  n / (1 + 12 * 0.0063);
    }
    printf("%.2lf", n);
    return 0; 
}

MT1247 存10年钱

(1)题目
银行利息月息为0.58%。某人10年中每年年底都取出1000元,到第10年时刚好取完。求存入的钱应是多少?


格式

输入格式:
无


输出格式:
输出实型,保留2位小数。

样例1

输入:
无

输出:
7036.59

(2)参考代码

#include
int main() 
{ 
    double n = 0;
    for (int i=1;i<=10;i++)
    {
        n += 1000;
        n = n / (1 + 12 * 0.0058);
    }
    printf("%.2lf", n);
    return 0; 
}

MT1248 吃桃

(1)题目
猴子摘了一堆桃,第一天吃了一半又多吃了一个,第二天把剩下的吃了一半,又多吃了一个。以后每天都吃了一半零一个。到第10天,只剩下一个,问原本又多少个桃子。


格式

输入格式:
 无

输出格式: 
输出整型

样例1

输入格式:
无

输出格式:
1534

(2)参考代码

#include
int main() 
{ 
    int n = 1;
    for (int i=0;i<9;i++)
    {
        n = (n + 1) * 2;
    }
    printf("%d", n);
    return 0; 
}

MT1249 练兵

(1)题目
兽人族的首领很聪明,总是先让士兵3人一排站队,再5人一排重新站队,最后再7人一排,他只用看看队尾人数就知道今天有多少人迟到了。输入3个非负整数a,b,c表示每种队形队尾的人数(a<3,b<5,c<7),计算总人数,无解则输出-1。 总人数在10到100之间。


格式

输入格式:
输入整型,空格分隔。


输出格式:
输出整型

样例1

输入:
2 1 6

输出:
41

(2)参考代码

#include
int main() 
{ 
    int x1, x2, x3;
    scanf("%d %d %d", &x1, &x2, &x3);
    for (int i=10;i<=100;i++)
    {
        if (i % 3 == x1 && i % 5 == x2 && i % 7 == x3)
        {
            printf("%d", i);
            return 0;
        }
    }
    printf("-1");
    return 0; 
}

MT1250 阶梯

(1)题目
科学家出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。编写程序求这条阶梯共有多少阶?


格式

输入格式:
无


输出格式:
119

样例1

输入:
无

输出:
119

(2)参考代码

#include
int main() 
{ 
    for (int i=1;i<=1000;i++)
    {
        if (i % 2 == 1 && i % 3 == 2 && i % 5 == 4 && i % 6 == 5 && i % 7 == 0)
        {
            printf("%d", i);
            return 0;
        }
    }
    return 0; 
}

MT1251 百钱买百猫

(1)题目
有人有一百块钱,打算买一百只猫。公猫一只5元,母猫一只3元,小猫3只1元,求应各买多少?


格式

输入格式: 
无

输出格式: 
分行输出,每行—组整数

样例1

输入格式: 
无

输出格式:

公猫=0 母猫=25 小猫=75
公猫=4 母猫=18 小猫=78
公猫=8 母猫=11 小猫=81
公猫=12 母猫=4 小猫=84

(2)参考代码

#include
int main() 
{ 
    for (int i=0;i<=20;i++)
    {
        for (int j=0;j<=33;j++)
        {
            for (int k=0;k<=100;k++)
            {
                if (k % 3 == 0 && i + j + k == 100 && 5 * i + 3 * j + k / 3 == 100)
                {
                    printf("公猫=%d 母猫=%d 小猫=%d\n", i, j, k);
                }
            }
        }
    }
    return 0; 
}

MT1252 自除数

(1)题目
自除数是可以被它包含的每一位数除尽的数。例如128,可以被1,2 和8整除。自除数位数中不包含0。输入整数,判断它是不是一个自除数,是就输出YES,否则输出NO。输入不考虑0,负数或者其他特殊情况。


格式

输入格式:
输入为整型


输出格式:
输出为YES或者NO

样例1

输入:
12

输出:
YES

(2)参考代码

#include
int main() 
{ 
    int n, x;
    scanf("%d", &n);
    int temp = n;

    while (temp)
    {
        x = temp % 10;
        if (x == 0)
        {
            printf("NO");
            return 0;
        }
        if (n % x != 0)
        {
            printf("NO");
            return 0;
        }
        temp /= 10;
    }
    printf("YES");
    return 0; 
}

MT1253 区间自除数

(1)题目
自除数是可以被它包含的每一位数除尽的数。例如128,可以被1,2和8整除。自除数位数中不包含0。输入整数区间,输出区间(含边界)内所有的自除数。不考虑0,负数或者其他特殊情况。


格式

输入格式: 
输入为整型,空格分隔

输出格式: 
输入出整型,空格分隔

样例1

输入格式: 
1 19

输出格式: 
1 2 3 4 5 6 7 8 9 11 12 15

(2)参考代码

#include
int main() 
{ 
    int a, b, temp, flag;
    scanf("%d %d", &a, &b);
    for (int i=a;i<=b;i++)
    {
        temp = i;
        flag = 1;
        while (temp)
        {
            if (temp % 10 == 0 || i % (temp % 10) != 0)
            {
                flag = 0;
                break;
            }
            temp /= 10;
        }
        if (flag == 1)
        {
            printf("%d ", i);
        }
    }
    return 0; 
}

MT1254 最大自除数

(1)题目
自除数是可以被它包含的每一位数除尽的数。例如128,因为可以被1,2 和8整除。自除数不包含 0。输入整数区间,输出区间(含边界)内最大自除数。不考虑0,负数或者其他特殊情况。


格式

输入格式:
输入为整型,空格分隔


输出格式:
输出为整型

样例1

输入:
1 20

输出:
15

(2)参考代码

#include
int main() 
{ 
    int a, b, temp, flag;
    scanf("%d %d", &a, &b);
    for (int i=b;i>=a;i--)
    {
        temp = i;
        flag = 1;
        while (temp)
        {
            if (temp % 10 == 0 || i % (temp % 10) != 0)
            {
                flag = 0;
                break;
            }
            temp /= 10;
        }
        if (flag == 1)
        {
            printf("%d ", i);
            break;
        }
    }
    return 0; 
}

MT1255 最小自除数

(1)题目
自除数是可以被它包含的每一位数除尽的数。例如128,因为可以被1,2 和8整除。自除数不包含 0。输入整数区间,输出区间(含边界)内最小自除数。不考虑0,负数或者其他特殊情况。


格式

输入格式:
输入为整型,空格分隔


输出格式:
输出为整型 

样例1

输入:
10 21

输出:
11

(2)参考代码

#include
int main() 
{ 
    int a, b, temp, flag;
    scanf("%d %d", &a, &b);
    for (int i=a;i<=b;i++)
    {
        temp = i;
        flag = 1;
        while (temp)
        {
            if (temp % 10 == 0)
            {
                flag = 0;
                break;
            }
            if ((i % (temp % 10)) != 0)
            {
                flag = 0;
            }
            temp /= 10;
        }
        if (flag == 1)
        {
            printf("%d\n", i);
            break;
        }
    }
    return 0; 
}

MT1256 最小数

(1)题目
给定两个整数N和M。找出可被M整除的最小数K(大于N),输出K,最小列宽为3。


格式

输入格式:
输入正整数N和M


输出格式:
输出整型

样例1

输入:
25 13

输出:
 26

备注

本题中,K<10000

(2)参考代码

#include
int main() 
{ 
    int N, M;
    scanf("%d %d", &N, &M);
    for (int i=N+1;;i++)
    {
        if (i % M == 0)
        {
            printf("%3d", i);
            break;
        }
    }
    return 0; 
}

MT1257 被3整除的五位数

(1)题目
统计个位是5但能被3整除的五位数有多少个,输出结果。


格式

输入格式:
无


输出格式:
输出整型 

样例1

输入:
无

输出:
3000

(2)参考代码

#include
int main() 
{ 
    int x = 3;
    int count = 0;
    for (int i = 10000;i<=99999;i++)
    {
        if (i % x == 0 && i % 10 == 5)
        {
            count++;
        }
    }
    printf("%d\n", count);
    return 0; 
}

MT1258 特殊整数

(1)题目
输入正整数m和n,找到包含m但不能被m整除的n位整数,统计这样的n位整数有多少个。本题不考虑不合理的输入或者溢出等特殊情况。


格式

输入格式: 
输入整型,空格分隔。

输出格式: 
输出整型

样例1

输入格式: 
7 5

输出格式: 
32152

(2)参考代码

#include
#include
int main() 
{ 
    int m, n, temp, flag, count = 0;
    scanf("%d %d", &m, &n);
    int num = pow(10.0, (double)n); 
    for (int i=num/10;i<=num-1;i++)
    {
        temp = i;
        flag = 0;
        while (temp)
        {
            if (temp % 10 == m)
            {
                flag = 1;
                break;
            }
            temp /= 10;
        }
        if (flag == 1 && i % m != 0)
        {
            count++;
        }
    }
    printf("%d", count);
    return 0; 
}

MT1259 统计哈沙德数

(1)题目
如果一个数字可被其数字之和整除,则称该数字为哈沙德数,输入一个大于9的正整数N,判断统计10到N之间(包含N)有多少个哈沙德数,输出结果。


格式

输入格式: 
输入整型

输出格式: 
输出整型

样例1

输入格式: 
30

输出格式:
 8

(2)参考代码

#include
int main() 
{ 
    int N, temp, sum, count = 0;
    scanf("%d", &N);
    for (int i=10;i<=N;i++)
    {
        temp = i;
        sum = 0;
        while (temp)
        {
            sum += temp % 10;
            temp /= 10;
        }
        if (i % sum == 0)
        {
            count++;
        }
    }
    printf("%d", count);
    return 0; 
}

MT1260 袋鼠躲猫猫

(1)题目
两只袋鼠在一个总长L米的圆环上躲猫猫。假定环上某一点为坐标原点0,袋鼠宝宝的出发坐标是x,袋鼠妈妈出发坐标是y,单位是米,宝宝一小时能跳a次,妈妈一小时跳b次,假定他们每一跳的距离都是1米,求多少小时后宝宝和妈妈才能见面。如果无法见面则输出-1。x,y, a,b,L都属于正常int范围。“见面”以每小时结束时刻,两只袋鼠的落点相同为准。


格式

输入格式: 
输入5个正整数x,y, a,b,L,空格分隔。其中x不等于y。

输出格式:
输出整型

样例1

输入格式: 
1 2 3 4 5

输出格式: 
4

(2)参考代码

#include
int main()
{
    int x, y, a, b, l, time = 1;
    scanf("%d %d %d %d %d", &x, &y, &a, &b, &l);
    if (a == b)
    {
        printf("-1");
        return 0;
    }
    while ((x + a) % l != (y + b) % l)
    {
        x = (x + a) % l;
        y = (y + b) % l;
        time++;
    }
    printf("%d", time);
    return 0;
}

你可能感兴趣的:(玥轩算法,算法,c语言,开发语言,数据结构,笔记,蓝桥杯,码蹄杯)