算法竞赛入门【码蹄集新手村600题】(MT1060-1080)
- 目录
- MT1061 圆锥体的体积
- MT1062 圆锥体表面积
- MT1063 立方体的体积
- MT1064 立方体的表面积
- MT1065 长方体的表面积
- MT1066 射线
- MT1067 线段
- MT1068 直线切平面
- MT1069 圆切平面
- MT1070 随机数的游戏
- MT1071 计算表达式的值
- MT1072 分数运算
- MT1073 时刻求和
- MT1074 平方根和对数值
- MT1075 平方根X
- MT1076 三维空间两点
- MT1077 幸运数
- MT1078 整除幸运数
- MT1079 floor函数
- MT1080 乘积之和
目录
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;
}