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

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


目录

MT1061 圆锥体的体积

(1)题目
请编写一个简单程序,输入圆锥体的半径和高,输出圆锥体的体积。不考虑非法输入。


格式

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

输出格式:
输出实型

样例1

输入:
3 5

输出:
47.123889

(2)参考代码

#include<stdio.h>
#define PI 3.1415926
int main() 
{ 
    double r, h;
    scanf("%lf %lf", &r, &h);
    printf("%lf", 1.0/3.0 * h * (PI * r * r));
    return 0; 
}

MT1062 圆锥体表面积

(1)题目
请编写一个简单程序,输入圆锥体的半径和高,输出圆锥体表面积。不考虑非法输入。(PI= 3.1415926)


格式

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

输出格式: 
输出实型

样例1

输入格式:
 3 5

输出格式: 
83.229759

(2)参考代码

#include<stdio.h>
#include<math.h>
#define PI 3.1415926
int main() 
{
    double r, h;
    scanf("%lf %lf", &r, &h);
    printf("%lf", PI*r*r+PI*r*sqrt(r*r+h*h));
    return 0; 
}

MT1063 立方体的体积

(1)题目
输入立方体边长,输出立方体的体积。不考虑非法输入。


格式

输入格式:
输入实型

输出格式:
输出实型

样例1

输入:
3 

输出:
27.000000

(2)参考代码

#include<stdio.h>
int main() 
{ 
    double x;
    scanf("%lf", &x);
    printf("%lf", x * x * x);
    return 0; 
}

MT1064 立方体的表面积

(1)题目
输入立方体边长,输出立方体的表面积。不考虑非法输入。


格式

输入格式:
输入实型

输出格式:
输出实型

样例1

输入:
3 

输出:
54.000000

(2)参考代码

#include<stdio.h>
int main() 
{ 
    double x;
    scanf("%lf", &x);
    printf("%lf", x * x * 6);
    return 0; 
}

MT1065 长方体的表面积

(1)题目
输入长方体边长宽高,输出长方体的表面积。不考虑非法输入。


格式

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

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

样例1

输入:
3 2 4

输出:
52.000000

(2)参考代码

#include<stdio.h>
int main() 
{ 
    double x, y, z;
    scanf("%lf %lf %lf", &x, &y, &z);
    printf("%.6lf", 2 * (x*y + y*z + z*x));
    return 0; 
}

MT1066 射线

(1)题目
在一条直线上点上N(N>=1)个点可以把这条直线分成多少条射线?N从键盘输入。不考虑负数,0或者其他特殊情况。


格式

输入格式:
输入为整型

输出格式:
输出为整型

样例1

输入:
3

输出:
6

(2)参考代码

#include<stdio.h>
int main() 
{ 
    int N;
    scanf("%d", &N);
    printf("%d", 2*N);
    return 0; 
}

MT1067 线段

(1)题目
有一条直线,线上有n个点(n>=2),请问这条直线会被分隔成多少个线段。n从键盘输入。不考虑负数,0或者其他特殊情况。


格式

输入格式:
输入为整型

输出格式:
输出为整型

样例1

输入:
3

输出:
3

(2)参考代码

#include<stdio.h>
int main() 
{ 
    int N, num = 0;
    scanf("%d", &N);
    for (int i=1;i<N;i++)
    {
        num += i;
    }
    printf("%d", num);
    return 0; 
}

MT1068 直线切平面

(1)题目
直线切平面,输入直线条数N,问最多把平面分成几块。比如一条直线可以把一个平面切割成2块。可以使用公式S= n * (n+1)/2 +1 。不考虑负数,0或者其他特殊情况。


格式

输入格式:
输入为整型

输出格式:
输出为整型

样例1

输入:
5

输出:
16

(2)参考代码

#include<stdio.h>
int main() 
{ 
    int N;
    scanf("%d", &N);
    printf("%d", N * (N + 1) / 2 + 1);
    return 0; 
}

MT1069 圆切平面

(1)题目
n个圆最多把平面分成几部分?输入圆的数量N,问最多把平面分成几块。比如一个圆以把一个平面切割成2块。 不考虑负数,0或者其他特殊情况。


格式

输入格式:
输入为整型

输出格式:
输出为整型

样例1

输入:
2

输出:
4

(2)参考代码

#include<stdio.h>
int main() 
{ 
    double N;
    scanf("%lf", &N);
    printf("%.0lf", N * N - N + 2);
    return 0; 
}

MT1070 随机数的游戏

(1)题目
小码哥在1到10之间随机选择了一个数字N,然后把所选数字加倍,之后加上一个偶数K,然后把所得的数字除以2,再把得的商与原始数字N相减,输出他们的差。不考虑负数,0或者其他特殊情况。比如输入N和K分别为8和2,那么8*2=16,16+2=18,18/2=9,9-8=1,那么应该输出1。


格式

输入格式: 
输入为整型数字N和K,空格分隔

输出格式: 
输出为整型

样例1

输入格式: 
3 10

输出格式: 
5

(2)参考代码

#include<stdio.h>
int main() 
{
    int N, K;
    scanf("%d %d", &N, &K);
    printf("%d", (2*N+K)/2-N);
    return 0; 
}

MT1071 计算表达式的值

(1)题目
请编写一个简单程序,计算45除以2再加上43.41592,然后减去36除以7的商,输出运算结果。


格式

输入格式:
无

输出格式:
输出实型

样例1

输入:
无

输出:
60.773063 

(2)参考代码

#include<stdio.h>
int main() 
{ 
    printf("%lf", 45.0/2.0+43.41592-36.0/7.0);
    return 0; 
}

MT1072 分数运算

(1)题目
输入两个分数,对他们进行加减乘除运算,输出结果。不考虑分母为0等特殊情况。


格式

输入格式: 
输入整型,如样例所示。

输出格式:
 输出计算结果实型,如样例所示。


样例1

输入格式: 
1/2 1/4

输出格式:
1/2 + 1/4=0.750000
1/2 - 1/4=0.250000
1/2 * 1/4=0.125000
1/2 / 1/4=2.000000

(2)参考代码

#include<stdio.h>
int main() 
{ 
    double x, y, a, b, z1, z2;
    scanf("%lf/%lf %lf/%lf", &x, &y, &a, &b);
    z1 = x / y;
    z2 = a / b;
    printf("%.0lf/%.0lf + %.0lf/%.0lf=%lf\n", x, y, a, b, z1+z2);
    printf("%.0lf/%.0lf - %.0lf/%.0lf=%lf\n", x, y, a, b, z1-z2);
    printf("%.0lf/%.0lf * %.0lf/%.0lf=%lf\n", x, y, a, b, z1*z2);
    printf("%.0lf/%.0lf / %.0lf/%.0lf=%lf\n", x, y, a, b, z1/z2);
    return 0; 
}

MT1073 时刻求和

(1)题目
输入正整数N和M,空格分隔。把他们看作在12小时制的时刻(小时)求和并输出,输出最小列宽为3列。


格式

输入格式:
输入正整数N和M,空格分隔。

输出格式:
输出整型

样例1

输入:
5 7

输出:
  0

(2)参考代码

#include<stdio.h>
int main() 
{ 
    int N, M;
    scanf("%d %d", &N, &M);
    if (N+M>=12)
    {
        printf("%3d", N+M-12);
    }
    else
    {
        printf("%3d", N+M);
    }
    return 0; 
}

MT1074 平方根和对数值

(1)题目
请编写一个简单程序,计算求给定数的平方根、2个对数值(ln,lg)。


格式

输入格式:
输入实型

输出格式:
输出平方根、对数值,空格分隔,保留两位小数

样例1

输入:
5

输出:
2.24 1.61 0.70

(2)参考代码

#include<stdio.h>
#include<math.h>
int main() 
{ 
    double x;
    scanf("%lf", &x);
    printf("%.2lf %.2lf %.2lf", sqrt(x), log(x), log10(x));
    return 0; 
}

MT1075 平方根X

(1)题目
输入正整数N, 求N的平方根X。如果N不是一个完美的平方,输出floor(X) 。不考虑不合理的输入等特殊情况。


格式

输入格式:
输入正整数N

输出格式:
输出整型

样例1

输入:
5

输出:
2

(2)参考代码

#include<stdio.h>
#include<math.h>
int main() 
{ 
    int N;
    scanf("%d", &N);
    int n = (double)sqrt(N);
    printf("%d\n", n);
    return 0; 
}

MT1076 三维空间两点

(1)题目
输入三维空间两点坐标(x,y,z),计算两点之间的距离并输出。


格式

输入格式:
输入实型坐标(x,y,z),空格分隔。每行以一个点。

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

样例1

输入:
-20 20 0  
20 -10 0

输出:
50.00

(2)参考代码

#include<stdio.h>
int main() 
{ 
    double x1, x2, y1, y2, z1, z2;
    scanf("%lf %lf %lf", &x1, &y1, &z1);
    scanf("%lf %lf %lf", &x2, &y2, &z2);
    printf("%.2lf\n", sqrt(pow(x2-x1, 2)+pow(y2-y1, 2)+pow(z2-z1, 2)));
    return 0; 
}

MT1077 幸运数

(1)题目
假定幸运数是只包含4或7的正整数,如7、47。判断一个正整数n是不是一个幸运数。是则输出YES,否则输出NO。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出整型范围的情况。


格式

输入格式:
输入为整型

输出格式:
是幸运数则输出YES,否则输出NO

样例1

输入:
47

输出:
YES

(2)参考代码

#include<stdio.h>
int main() 
{ 
    int x, flag;
    scanf("%d", &x);
    while (x)
    {
        if (x % 10 == 4 || x % 10 == 7)
        {
            flag = 1;
            x /= 10;
        }
        else
        {
            flag = 0;
            break;
        }
    }
    if (flag == 1)
    {
        printf("YES");
    }
    else
    {
        printf("NO");
    }
    return 0; 
}

MT1078 整除幸运数

(1)题目
假定幸运数是只包含4或7的正整数,如7、47。判断一个正整数n是否能被一个幸运数整除。是则输出YES,否则输出NO。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出整型范围的情况。


格式

输入格式: 
输入为整型

输出格式: 
能被一个幸运数整除则输出YES,否则输出NO

样例1

输入格式: 
47

输出格式: 
YES

(2)参考代码

#include<stdio.h>
int main() 
{ 
    int n, temp, flag;
    scanf("%d", &n);
    for (int i=1;i<=n;i++)
    {
        if (n % i == 0)
        {
            temp = i;
            flag = 1;
            while (temp)
            {
                if (temp % 10 != 4 && temp % 10 != 7)
                {
                    flag = 0;
                    break;
                }
                temp /= 10;
            }
        }
        if (flag == 1)
        {
            printf("YES");
            return 0;
        }
    }
    printf("NO");
    return 0; 
}

MT1079 floor函数

(1)题目
给定一个正整数n,求满足floor(n/x)=y的x和y (x和y是正整数)。比如输入5,则(x, y)的组合可以有:(1, 5), (2, 2), (3, 1), (4, 1), (5, 1)。不考虑负数,0或者其他特殊情况。


格式

输入格式:
输入为整型

输出格式:
输出为整型,空格分隔,每组一行。前一个数为x,后面一个为y。输出按照x从小到大的次序输出。

样例1

输入:
5

输出:
1 5  
2 2  
3 1  

(2)参考代码

#include<stdio.h>
int main() 
{ 
    int n, y = 0;
    scanf("%d", &n);
    for (int x=1;x<=n;x++)
    {
        y = n / x;
        printf("%d %d\n", x, y);
    }
    return 0; 
}

MT1080 乘积之和

(1)题目
给定一个正整数n,求满足floor(n/x)=y的x和y的乘积之和 (x和y是正整数)。比如输入5,则(x, y)的组合可以有:(1, 5), (2, 2), (3, 1), (4, 1), (5, 1),那么, 1 * 5 + 2 * 2 + 3 * 1 + 4 * 1 + 5 * 1 = 5 + 4 + 3 + 4 + 5 = 21。不考虑负数,0或者其他特殊情况。


格式

输入格式:
输入为整型

输出格式:
输出为整型

样例1

输入:
5

输出:
21

(2)参考代码

#include<stdio.h>
int main() 
{ 
    int n, y = 0, sum = 0;
    scanf("%d", &n);
    for (int x=1;x<=n;x++)
    {
        y = n / x;
        sum += x * y;
    }
    printf("%d\n", sum);
    return 0; 
}

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玥轩_521

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值