算法竞赛入门【码蹄集新手村600题】(MT1080-1100)
- 目录
- MT1081 x+y的和
- MT1082 x-y的和
- MT1083 向下取整
- MT1084 k次方根
- MT1085 分期付款
- MT1086 公里转换为米
- MT1087 温度转换
- MT1088 温度对照
- MT1089 整理玩具
- MT1090 卡罗尔序列
- MT1091 合并||
- MT1092 非常大的N
- MT1093 序列
- MT1094 AP数列
- MT1095 GP数列
- MT1096 三角形斜边
- MT1097 小码哥的生日
- MT1098 完全平方数
- MT1099 个人所得税
- MT1100 带参数的宏
目录
MT1081 x+y的和
(1)题目
给定一个正整数n,求满足floor(n/x)=y的x和y的和。不考虑负数,0或者其他特殊情况。比如输入5,则(x, y)的组合可以有:(1, 5), (2, 2), (3, 1), (4, 1), (5, 1),那么, 1 + 5 + 2 + 2 + 3 + 1 + 4 + 1 + 5 + 1 = 6 + 4 + 4 + 5 + 6 = 25。
格式
输入格式:
输入为整型
输出格式:
输出为整型
样例1
输入:
5
输出:
25
(2)参考代码
#include<stdio.h>
int main()
{
int n, x, y, sum = 0;
scanf("%d", &n);
for (x=1;x<=n;x++)
{
y = n / x;
sum += x + y;
}
printf("%d\n", sum);
return 0;
}
MT1082 x-y的和
(1)题目
给定一个正整数n,求满足floor(n/x)=y的x和y的差之和。x,y不考虑负数,0或者其他特殊情况。比如输入5,则(x, y)的组合可以有:(1, 5), (2, 2), (3, 1), (4, 1), (5, 1),那么, 1 - 5 + 2 - 2 + 3 - 1 + 4 - 1 + 5 - 1 = -4 + 0 + 2 + 3 + 4 = 5。
格式
输入格式:
输入为整型
输出格式:
输出为整型
样例1
输入:
5
输出:
5
(2)参考代码
#include<stdio.h>
int main()
{
int n, x, y, sum = 0;
scanf("%d", &n);
for (x=1;x<=n;x++)
{
y = n / x;
sum += x - y;
}
printf("%d\n", sum);
return 0;
}
MT1083 向下取整
(1)题目
输入正整数N,求N的立方根。向下取整后输出,输出最小列宽为3列。
格式
输入格式:
输入正整数N
输出格式:
输出整型
样例1
输入:
3
复制
输出:
1
(2)参考代码
#include<stdio.h>
#include<math.h>
int main()
{
double N;
scanf("%lf", &N);
printf("%3d\n", (int)pow(N, 1.0/3.0));
return 0;
}
MT1084 k次方根
(1)题目
输入正整数N和K。找出整数M,使得M的K次方根的整数部分是N。输出这样的M有多少个。比如N = 3,K = 2,则9,10,11,12,13,14,15的平方根都是3。不考虑不合理的输入等特殊情况。
格式
输入格式:
输入整型,空格分隔
输出格式:
输出整型
样例1
输入格式:
2 3
输出格式:
19
(2)参考代码
#include<stdio.h>
#include<math.h>
int main()
{
int N, K, min_M, max_M;
scanf("%d %d", &N, &K);
min_M = pow(N, K);
max_M = pow(N+1, K);
printf("%d\n", max_M-min_M);
return 0;
}
MT1085 分期付款
(1)题目
请编写一个简单程序,使用以下公式计算每月分期付款:
其中:
p=本金
r=每月利率
n=分期付款多少个月
如果年利率为R%,则使用以下公式计算月利率:
Rate ® = R/(12*100)
格式
输入格式:
输入本金、年利率、多少个月,double型,空格分隔
输出格式:
输出double型,保留1位小数
样例1
输入:
1000000 7 120
输出:
11610.8
(2)参考代码
#include<stdio.h>
#include<math.h>
int main()
{
double p, r, n, EMI, R;
scanf("%lf %lf %lf", &p, &R, &n);
r = R / (12 * 100);
EMI = p * r * pow(1+r, n) / (pow(1+r, n) - 1);
printf("%.1lf", EMI);
return 0;
}
MT1086 公里转换为米
(1)题目
请编写一个简单程序,实现将公里(km)转换为米(m)的转换。
格式
输入格式:
输入实型
输出格式:
输出实型, 保留2位小数
样例1
输入:
6.427
输出:
6.43公里=6427.00米
(2)参考代码
#include<stdio.h>
int main()
{
double x;
scanf("%lf", &x);
printf("%.2lf公里=%.2lf米", x, 1000 * x);
return 0;
}
MT1087 温度转换
(1)题目
请编写一个简单程序,实现以摄氏度为单位的温度转换为华氏度,不考虑不合理的输入或是溢出等特殊情况。
格式
输入格式:
输入实型
输出格式:
输出实型,保留2位小数,如样例所示。
样例1
输入:
37
输出:
37.00 C=98.60 F
(2)参考代码
#include<stdio.h>
int main()
{
double C;
scanf("%lf", &C);
printf("%.2lf C=%.2lf F", C, 9*C/5+32);
return 0;
}
MT1088 温度对照
(1)题目
输出华氏温度F(-50<=F<200)和摄氏温度C对照表,其计算公式为C=9(F−32)/5。不考虑非法输入等特殊情况。
格式
输入格式:
输入华氏温度F为整型
输出格式:
输出摄氏温度C为实型
样例1
输入:
-50
输出:
-147.600000
(2)参考代码
#include<stdio.h>
int main()
{
double F;
scanf("%lf", &F);
printf("%lf", 9*(F-32)/5);
return 0;
}
MT1089 整理玩具
(1)题目
宝宝在整理自己的N个玩具(N<=10),有的抽屉放2个玩具,有的放1个。统计玩具可以多少种方式整理好。注:宝宝分不清抽屉的顺序,所以{1 2 1},{2 1 1},{1 1 2},这样的放置方式被宝宝认为是相同的。
格式
输入格式:
输入正整数N
输出格式:
输出整数
样例1
输入格式:
4
输出格式:
3
(2)参考代码
#include<stdio.h>
int main()
{
int N;
scanf("%d", &N);
printf("%d", N / 2 + 1);
return 0;
}
MT1090 卡罗尔序列
(1)题目
卡罗尔数是其值满足4n–2(n+1)–1的整数(n为正整数)。由卡罗尔数组成的序列叫卡罗尔序列:-1, 1, 3, 5, 7…输入正整数N,编写函数,输出第N个卡罗尔数。
格式
输入格式:
输入正整数N(<99999)
输出格式:
输出整型
样例1
输入:
4
输出:
5
(2)参考代码
#include<stdio.h>
int main()
{
int N;
scanf("%d", &N);
printf("%d", 4*N - 2*(N+1) - 1);
return 0;
}
MT1091 合并||
(1)题目
输入两个两位数的正整数a、b,编写程序将a、b合并形成一个整数放在c中,合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上,输出c的结果。
格式
输入格式:
输入整型,空格分隔。
输出格式:
输出整型
样例1
输入格式:
12 34
输出格式:
4132
(2)参考代码
#include<stdio.h>
int main()
{
int a, b, z1, z2, z3, z4, c;
scanf("%d %d", &a, &b);
z1 = a / 10;
z2 = a % 10;
z3 = b / 10;
z4 = b % 10;
c = z1 * 100 + z2 * 1 + z3 * 10 + z4 * 1000;
printf("%d\n", c);
return 0;
}
MT1092 非常大的N
(1)题目
编写程序求
格式
输入格式:
输入为正整数
输出格式:
输出为浮点型(保留六位小数)。
样例1
输入格式:
10001
输出格式:
50.383855
(2)参考代码
#include<stdio.h>
#include<math.h>
int main()
{
int N, i, temp = 1;
double sum = 0;
scanf("%d", &N);
for (i=1;i<=N;i++)
{
sum += temp * pow(i, 1.0/2.0);
temp *= -1;
}
printf("%.6lf", sum);
return 0;
}
MT1093 序列
(1)题目
有一个序列1,3,6,10,15,21…,请找出它的规律,输入整数N,输出第N项。不考虑负数,0或者其他特殊情况。
格式
输入格式:
输入为整型
输出格式:
输出为整型
样例1
输入格式:
4
输出格式:
10
(2)参考代码
#include<stdio.h>
int main()
{
int N, i = 1, j = 1;
scanf("%d", &N);
if (N % 2 == 0)
{
printf("%d", N/2*(N+1));
}
else
{
printf("%d", (N+1)/2*N);
}
return 0;
}
MT1094 AP数列
(1)题目
输入AP数列(正整数)的前两项A1、A2和n。输出序列的第n项。不考虑负数,0或者其他特殊情况。
格式
输入格式:
输入为整型,空格分隔
输出格式:
输出为整型
样例1
输入格式:
2 3 4
输出格式:
5
(2)参考代码
#include<stdio.h>
int main()
{
int A1, A2, n, d;
scanf("%d %d %d", &A1, &A2, &n);
d = A2 - A1;
printf("%d", A1 + (n - 1) * d);
return 0;
}
MT1095 GP数列
(1)题目
输入GP数列(正整数)的前两项A1、A2和n。输出序列的第n项。不考虑负数,0或者其他特殊情况。
格式
输入格式:
输入为整型,空格分隔
输出格式:
输出为整型
样例1
输入格式:
1 3 4
输出格式:
27
(2)参考代码
#include<stdio.h>
#include<math.h>
int main()
{
int A1, A2, n;
double q;
scanf("%d %d %d", &A1, &A2, &n);
q = A2 / A1;
printf("%d", (int)(A1 * pow(q, n-1)));
return 0;
}
MT1096 三角形斜边
(1)题目
假定直角三角形的斜边是固定长度的,输入三角形的最大可能面积,输出斜边的长度。比如最大面积为25的直角三角形,斜边的长度是10。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出数据范围的情况。
格式
输入格式:
输入为整型
输出格式:
输出为整型
样例1
输入:
21
输出:
9
(2)参考代码
#include<stdio.h>
#include<math.h>
int main()
{
double s;
scanf("%lf", &s);
printf("%d\n", (int)sqrt(4 * s));
//printf("%d\n", sqrt(4 * s));
//输出结果为1
return 0;
}
MT1097 小码哥的生日
(1)题目
小码哥过生日,妈妈给她买了一个很大的蛋糕,小码哥开始给朋友们分蛋糕,如果切n刀,最多可以分给多少小朋友呢?每个朋友一块蛋糕。不考虑负数,0或者其他特殊情况。n从键盘输入。
格式
输入格式:
输入为整型
输出格式:
输出为整型
样例1
输入:
4
输出:
11
(2)参考代码
#include<stdio.h>
int main()
{
int N;
scanf("%d", &N);
printf("%d", N * (N + 1) / 2 + 1);
return 0;
}
MT1098 完全平方数
(1)题目
输入一个正整数n,检查它是否为完全平方数。不考虑0,负数或者其他特殊情况。
格式
输入格式:
输入为整型
输出格式:
输出为YES或者NO
样例1
输入格式:
35
输出格式:
NO
(2)参考代码
#include<stdio.h>
int main()
{
int n, i;
scanf("%d", &n);
for (i=1;i<=n;i++)
{
if (i * i == n)
{
printf("YES");
return 0;
}
}
printf("NO");
return 0;
}
MT1099 个人所得税
(1)题目
将个人所得税算法定义为宏。个人所得税计算公式为︰应纳税所得额sx税率–速算扣除数。不考虑不合理的输入或是溢出等特殊情况。税率如下表:
格式
输入格式:
输入为整型
输出格式:
输出为整型
样例1
输入格式:
500
输出格式:
25
(2)参考代码
#include<stdio.h>
#define tax(s, rate, k) ((s)*(rate)-(k))
int main()
{
int s, k;
double rate;
scanf("%d", &s);
if (s<=500)
{
rate = 0.05;
k = 0;
printf("%d", (int)tax(s, rate, k));
}
else if (500<s && s<=2000)
{
rate = 0.10;
k = 25;
printf("%d", (int)tax(s, rate, k));
}
else if (2000<s && s<=5000)
{
rate = 0.15;
k = 125;
printf("%d", (int)tax(s, rate, k));
}
else if (5000<s && s<=20000)
{
rate = 0.20;
k = 375;
printf("%d", (int)tax(s, rate, k));
}
else if (20000<s && s<=40000)
{
rate = 0.25;
k = 1375;
printf("%d", (int)tax(s, rate, k));
}
else if (40000<s && s<=60000)
{
rate = 0.30;
k = 3375;
printf("%d", (int)tax(s, rate, k));
}
else if (60000<s && s<=80000)
{
rate = 0.35;
k = 6375;
printf("%d", (int)tax(s, rate, k));
}
else if (80000<s && s<=100000)
{
rate = 0.40;
k = 10375;
printf("%d", (int)tax(s, rate, k));
}
else
{
rate = 0.45;
k = 15375;
printf("%d", (int)tax(s, rate, k));
}
return 0;
}
MT1100 带参数的宏
(1)题目
请编写一个简单程序,把f(x)=(x*x)定义成带参数的宏,计算f(9)/f(6)并输出结果。
格式
输入格式:
无
输出格式:
输出为实型
样例1
输入:
无
输出:
2.250000
(2)参考代码
#include<stdio.h>
#define f(x) ((x)*(x))
int main()
{
printf("%lf\n", f(9.0)/f(6.0));
return 0;
}