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

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

  • 目录
    • MT1221 分数的总和
    • MT1222 等差数列
    • MT1223 N是什么
    • MT1224 棋盘
    • MT1225 复杂分数
    • MT1226 解不等式
    • MT1227 宝宝爬楼梯
    • MT1228 宝宝抢糖果
    • MT1229 搬家公司
    • MT1230 圆周率
    • MT1231圆周率II
    • MT1232 数字和
    • MT1233 数字之和
    • MT1234 一个数字
    • MT1235 回文数字
    • MT1236 回文
    • MT1237 六六大顺
    • MT1238 幸运数字3
    • MT1239 自恋性数
    • MT1240 好多自恋性数

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


目录

MT1221 分数的总和

(1)题目


格式


样例1


(2)参考代码

#include
#define N 20
int main() 
{
    double a[N], b[N], sum = 0;
    int i;
    a[0] = 1.0;
    a[1] = 2.0;
    b[0] = 2.0;
    b[1] = 3.0;
    for (i=2;i<N;i++)
    {
        a[i] = a[i-1] + a[i-2];
        b[i] = b[i-1] + b[i-2];
    }
    //校验数据
    // for (i=0;i
    // {
    //     printf("%lf %lf\n", a[i], b[i]);
    // }
    for (i=0;i<N;i++)
    {
        sum = sum + (b[i] / a[i]);
    }
    printf("%.2lf", sum);
}

MT1222 等差数列

(1)题目
求等差数列前N项的级数之和。不考虑不合理的输入等特殊情况。


格式

输入格式:
输入N,首项M,差值K,整型,空格分隔。


输出格式:
输出整型

样例1

输入:
5 1 3

输出:
35

(2)参考代码

#include
int main() 
{ 
    int N, M, K;
    scanf("%d %d %d", &N, &M, &K);
    printf("%d\n", M * N + N * (N - 1) * K / 2);
    return 0; 
}

MT1223 N是什么

(1)题目
给定一系列数字3、10、21、36…,输入正整数N,输出上述序列的第N个值。从N=1开始计数。


格式

输入格式:
输入正整数N


输出格式:
输出整型

样例1

输入:
5

输出:
55

备注

N小于10000

(2)参考代码

#include
int main()
{
    int N, num, i = 3;
    scanf("%d", &N);
    num = N * (i + 2 * (N - 1));
    printf("%d\n", num);
}

MT1224 棋盘

(1)题目
求一个N*N棋盘中的方块总数。


格式

输入格式:
输入整型N    


输出格式:
输出整型

样例1

输入:
2

输出:
5

备注

考虑到取值范围,可用long整型定义变量

(2)参考代码

#include
int main() 
{
    int N;
    long count = 0;
    scanf("%d", &N);
    for (int i = 1;i<=N;i++)
    {
        count += (i * i);
    }
    printf("%ld", count);
    return 0; 
}

MT1225 复杂分数

(1)题目
编写程序连续输入a1、a2、…、a5,计算下列表达式的值并输出。本题不考虑输入0,负数或者其他特殊情况。
算法竞赛入门【码蹄集新手村600题】(MT1220-1240)C语言_第1张图片


格式

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

输出格式: 
输出为实型

样例1

输入格式: 
1 2 3 4 5

输出格式: 
1.571429

(2)参考代码

#include
int main() 
{ 
    double a[5];
    for (int i=0;i<5;i++)
    {
        scanf("%lf", &a[i]);
    }
    double num = a[4];
    for (int i=3;i>=0;i--)
    {
        num = 1 + a[i] / num;
    }
    printf("%lf", num);
    return 0; 
}


MT1226 解不等式

(1)题目
n为正整数,求解n满足不等式:在这里插入图片描述


格式

输入格式:
输入正整数a,b,空格分隔。


输出格式:
输出整型区间上下限,空格分隔。

样例1

输入:
2010 2011

输出:
18611 18621

备注

对于100%的数据:1<=n<=100,000,1<=a

(2)参考代码

#include
int main() 
{ 
    int a, b, n1, n2;
    scanf("%d %d", &a, &b);
    double sum = 0, num = 0;
    for (int i=1;;i++)
    {
        num += (1.0 / (double)i);
        sum += 1.0 / num;
        if (a < sum)
        {
            n1 = i;
            break;
        }
    }
    for (int i=n1+1;;i++)
    {
        num += (1.0 / (double)i);
        sum += 1.0 / num;
        if (b <= sum)
        {
            n2 = i - 1;
            break;
        }
    }
    printf("%d %d", n1, n2);
    return 0; 
}

MT1227 宝宝爬楼梯

(1)题目
楼梯有N个台阶(N<=10),宝宝想爬到顶部。她一次可以爬1级或2级台阶。统计宝宝可以用多少种方式爬到达顶端。


格式

输入格式: 
输入正整数N

输出格式: 
输出整型

样例1

输入格式: 
4

输出格式: 
5

(2)参考代码

#include
int main() 
{ 
    int a[10] = {0, 1, 2};
    int N;
    scanf("%d", &N);
    for (int i=3;i<=N;i++)
    {
        a[i] = a[i-1] + a[i-2];
    }
    printf("%d\n", a[N]);
    return 0; 
}

MT1228 宝宝抢糖果

(1)题目
宝宝们一起抢N个糖果(N<=10),手快的宝宝可以抢到2个糖果,手慢的只能抢到一个糖果。统计糖果可以多少种方式被瓜分。


格式

输入格式:
输入正整数N


输出格式:
输出整型

样例1

输入:
4

输出:
5

(2)参考代码



MT1229 搬家公司

(1)题目
N件家具(N<=10),力气大的一次可以搬2件,力气小的一次只能搬1件。统计家具可以用多少种方式搬完。


格式

输入格式: 
输入正整数N

输出格式: 
输出整型

样例1

输入格式: 
4

输出格式: 
5

(2)参考代码

**#include<stdio.h>
int main() 
{ 
    int N, a[100] = {0, 1, 2};
    scanf("%d", &N);
    for (int i=3;i<=N;i++)
    {
        a[i] = a[i-1] + a[i-2];
    }
    printf("%d", a[N]);
    return 0; 
}**

MT1230 圆周率

(1)题目
编写一个程序,使用以下公式计算PI的近似值PI=4(1-1/3+1/5-1/7+1/9…)。括号中的最后一项应小于十的负六次方。


格式

输入格式:
无


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

样例1

输入:
无

输出:
3.14

(2)参考代码

#include
int main()
{
    double x = 0, PI = 0;
    for (int i = 1;;i += 2)
    {
        x = 1 / (double)i;
        if (x < 1e-6)
        {
            break;
        }
        if (i % 4 == 3)
        {
            x = -x;
        }
        PI += x;
    }
    printf("%.2lf\n", 4 * PI);
    return 0;
}

MT1231圆周率II

(1)题目
由近似公式: T/2=2/1 * 2/3* 4/3 * 4/56/56/7 *8/7 * 8/9…,求圆周率(精确到10的-6次方)。


格式

输入格式: 
无

输出格式: 
输出为实型,2位小数

样例1

输入格式:
 无

输出格式: 
3.14

(2)参考代码

#include
int main() 
{ 
    double num = 1;
    for (double i=1;i<=1000000;i++)
    {
        if ((int)i % 2)
        {
            num *= ((i + 1) / i);
        }
        else
        {
            num *= (i / (i + 1));
        }
    }
    printf("%.2lf", num * 2);
    return 0; 
}

MT1232 数字和

(1)题目
请编写一个简单程序,求一个数的各位数字之和。比如输入123,输出1+2+3的和6.


格式

输入格式:
输入整型 


输出格式:
输出整型 

样例1

输入:
123

输出:
6

(2)参考代码

#include
int main() 
{ 
    int x, sum = 0;
    scanf("%d", &x);
    while (x)
    {
        sum += x % 10;
        x /= 10;
    }
    printf("%d", sum);
    return 0; 
}

MT1233 数字之和

(1)题目
求一个自然数n中各位数字之和(n由用户输入)。不考虑负数等特殊情况。


格式

输入格式:
输入为整型


输出格式:
输出为整型

样例1

输入:
567

输出:
18

(2)参考代码

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

MT1234 一个数字

(1)题目
输入一个非负整数N,重复将其所有数字相加,直到结果只有一个数字,输出这个数字,输出最小列宽3列。


格式

输入格式:
输入整型


输出格式:
输出整型

样例1

输入:
89

输出:
  8

(2)参考代码

#include
int main() 
{ 
    int N, sum;
    scanf("%d", &N);

    do{
        sum = 0;
        while (N)
        {
            sum += N % 10;
            N /= 10;
        }
        N = sum;
    }while (sum >= 10);
    printf("%3d\n", sum);
    return 0; 
}

MT1235 回文数字

(1)题目
请编写一个简单程序,检查数字是否为回文。像12521,123321,这样的从左向右读和从右向左读是一样的数字是回文数字。


格式

输入格式: 
输入整型

输出格式: 
输出Y或N

样例1

输入格式: 
12521

输出格式: 
Y

(2)参考代码

#include
int main() 
{ 
    int n;
    scanf("%d", &n);
    int temp = n, N = 0;
    while (temp)
    {
        N = (N * 10) + (temp % 10);
        temp /= 10;
    }
    if (N == n)
    {
        printf("Y");
    }
    else
    {
        printf("N");
    }
    return 0; 
}


MT1236 回文

(1)题目
输入正整数N,判断N的各位数字之和是否为回文数。(注:回文数是一个在反转时保持不变的数。比如121,7等。)不考虑不合理的输入等特殊情况。


格式

输入格式:
输入正整数N


输出格式:
输出YES或者NO

样例1

输入:
56

输出:
YES

备注

测试数据集输入数据包含长整型。

(2)参考代码



MT1237 六六大顺

(1)题目
输入正整数N,输出N以内(含N),6的倍数,并且包含6的数字,比如36等。


格式

输入格式:
输入整型

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

样例1

输入格式:
 40

输出格式:
 6 36

(2)参考代码

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

MT1238 幸运数字3

(1)题目
输入正整数N,输出N以内(含N) 3的倍数,或者包含3的数字,比如13,32等。


格式

输入格式: 
输入整型

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

样例1

输入格式: 
20

输出格式: 
3 6 9 12 13 15 18

(2)参考代码

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

MT1239 自恋性数

(1)题目
请编写一个简单程序,判断自恋性数。如果一个正整数等于其各个数字的立方和,则称该数为自恋性数(亦称为阿姆斯特朗数)


格式

输入格式:
输入整型 


输出格式:
输出Y或者N

样例1

输入:
407

输出:
Y

(2)参考代码

#include
#include
int main() 
{ 
    int x, temp, count = 0;
    scanf("%d", &x);
    temp = x;
    while (temp)
    {
        count += pow(temp % 10, 3); 
        temp /= 10;
    }
    if (x == count)
    {
        printf("Y");
    }
    else
    {
        printf("N");
    }
    return 0; 
}

MT1240 好多自恋性数

(1)题目
请编写一个简单程序,输入正整数n,输出n以内自恋性数。如果一个正整数等于其各个数字的立方和,则称该数为自恋性数(亦称为阿姆斯特朗数)


格式

输入格式: 
输入为整型

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

样例1

输入格式: 
500

输出格式: 
1 153 370 371 407

(2)参考代码

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

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