算法竞赛入门【码蹄集新手村600题】(MT1051-1100)
前言
为什么突然想学算法了?
> 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。
> 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪一条路,都不免需要一些相对丰富的算法知识,是故,便产生了一个暑假速成算法的计划,可能对于像我这种算法竞赛小白而言,几乎很难,但我仍然还是想尝试一下,毕竟,梦想还是要有的,万一实现了呢?~( ̄▽ ̄~)~
为什么选择码蹄集作为刷题软件?
码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的,其依托全国各大名校计算机系和清华大学出版社等单位的强大资源,旨在为计算机学习爱好者提供全面和权威的计算机习题。
目录
1. MT1051 程序设计入门
(1)题目描述
输入四边4个顶点A,B,C,D的坐标(x,y),计算并输出四边形面积。
格式
输入格式: 依次输入4个顶点A,B,C,D的坐标(x,y),四边形一定是凸四边形,整型,空格分隔。
.
输出格式: 输出实型,保留2位小数。
样例1
输入格式: 0 0 1 0 5 5 0 1
.
输出格式: 5.00
(2)参考代码
#include<bits/stdc++.h>
//四边形分别按不同对角线分成两个三角形,并求和除2
//求三角形面积最好用海伦公式
using namespace std;
double getarea(double,double,double);
int main( )
{
int x1,x2,x3,x4,y1,y2,y3,y4;
double s1,s2,s3,s4;
double a,b,c,d,e,f;
scanf("%d%d%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
a=sqrt(pow(x1-x2,2)+pow(y1-y2,2));
d=sqrt(pow(x1-x4,2)+pow(y1-y4,2));
e=sqrt(pow(x1-x3,2)+pow(y1-y3,2));
f=sqrt(pow(x2-x4,2)+pow(y2-y4,2));
b=sqrt(pow(x2-x3,2)+pow(y2-y3,2));
c=sqrt(pow(x3-x4,2)+pow(y3-y4,2));
s1=getarea(a,b,e);
s2=getarea(d,c,e);
s3=getarea(a,d,f);
s4=getarea(c,b,f);
printf("%.2lf",(s1+s2+s3+s4)/2);
return 0;
}
double getarea(double a,double b,double c){
double p;
p=1.0/2*(a+b+c);
return sqrt(p*(p-a)*(p-b)*(p-c));
}
2. MT1052 直角坐标到极坐标的转换
(1)题目描述
请编写一个简单程序,实现直角坐标(x,y)到极坐标(r,日)的转换。数学中,极坐标系是一个二维坐标系,其中平面上的每个点由一个夹角和一段相对中心点——极点(相当于我们较为熟知的直角坐标系中的原点)的距离来表示。PI=3.1415926
其中:
格式
输入格式: 输入float型,空格分隔
.
输出格式: 输出float型,空格分隔,保留1位小数
样例1
输入格式:1 1
.
输出格式: 1.4 45.0
(2)参考代码
#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std;
int main( )
{
double x,y;
scanf("%lf%lf",&x,&y);
printf("%.1lf %.1lf",sqrt(pow(x,2)+pow(y,2)),180/PI*atan2(y,x));
return 0;
}
3. MT1053 极坐标到直角坐标的转换
(1)题目描述
请编写一个简单程序,实现极坐标(r,О)到直角坐标(x,y)的转换。数学中,极坐标系是一个二维坐标系,其中平面上的每个点由一个夹角和一段相对中心点——极点(相当于我们较为熟知的直角坐标系中的原点)的距离来表示。PI=3.1415926
其中:
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型,逗号分隔,保留2位小数
样例1
输入格式: 1.4142 45
.
输出格式: 1.00,1.00
(2)参考代码
#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std;
int main( )
{
double x,y;
scanf("%lf%lf",&x,&y);
printf("%.2lf,%.2lf",x*cos(y/180.0*PI),x*(sin(y/180.0*PI)));
return 0;
}
4. MT1054 弓形弦长
(1)题目描述
假定弓形弦长为C,半径为R,弦高为H,输入R和H,输出弓形弦长C。计算公式如下:
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型,逗号分隔,保留2位小数
样例1
输入格式: 3 2.23607输出格式: 5.80
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double r,h,C;
scanf("%lf %lf",&r,&h);
C = 2*sqrt(h*(2*r-h));
printf("%.2lf",C);
return 0;
}
5. MT1055 弓形半径
(1)题目描述
假定弓形弦长为C,半径为R,弦高为H,输入C和H,按公式R=(CC+4H*H)/8H输出弓形半径R。
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型,逗号分隔,保留2位小数
样例1
输入格式: 4 2.23607
.
输出格式: 2.01
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double r,h,C;
scanf("%lf %lf",&C,&h);
r = (C*C+4*h*h)/(8*h);
printf("%.2lf",r);
return 0;
}
6. MT1056 弓形弧长
(1)题目描述
假定弓形弧长为L,半径为R,圆心角为A,输入R和A,按公式L=0.01745R*A计算并输出弓形弧长L。
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型,逗号分隔,保留2位小数
样例1
输入格式: 3 83.62063
.
输出格式: 4.38
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double A,R,L;
scanf("%lf %lf",&R,&A);
L=0.01745*R*A;
printf("%.2lf",L);
return 0;
}
7. MT1057 弓形圆心角
(1)题目描述
假定弓形弧长为L,半径为R,圆心角为A,输入R和L,按公式A=57.296L/R计算并输出弓形圆心角A。
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型,逗号分隔,保留2位小数
样例1
输入格式: 3 4.37837
.
输出格式: 83.62
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double R,L,A;
scanf("%lf %lf",&R,&L);
A=57.296*L/R;
printf("%.2lf",A);
return 0;
}
8. MT1058 弓形弦高
(1)题目描述
假定弓形弦长为C,半径为R,弦高为H,输入R和C,按公式计算并输出弓形弦高H。
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型,逗号分隔,保留2位小数
样例1
输入格式: 3 4
.
输出格式: 0.76
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double R,C,H;
scanf("%lf %lf",&R,&C);
H = R-1.0/2*sqrt(4*R*R-C*C);
printf("%.2lf",H);
return 0;
}
9. MT1059 弓形面积
(1)题目描述
假定弓形弦长为C,半径为R,弦高为H,弧长为L,输入R、C、H和L,按公式计算并输出弓形面积F。
F=1/2 (RL-C(R-H))
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型,逗号分隔,保留2位小数
样例1
输入格式: 3 4 2.23607 4.37837
.
输出格式: 5.040
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double R,C,H,L,F;
scanf("%lf %lf %lf %lf",&R,&C,&H,&L);
F = 1.0/2 * (R*L-C*(R-H));
printf("%.3lf",F);
return 0;
}
10. MT1060 圆锥的表面积
(1)题目描述
请编写一个简单程序,输入半径和高度,计算输出圆锥的表面积。(PI是3.1415926)
计算公式为:
格式
输入格式: double型,空格分隔
.
输出格式: 输出圆维的表面积,保留2位小数
样例1
输入格式: 8 12
.
输出格式: Surface area=563.53
(2)参考代码
#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std;
int main( )
{
double r,h,area;
scanf("%lf %lf",&r,&h);
area = PI*r*(r+sqrt(r*r+h*h));
printf("Surface area=%.2lf",area);
return 0;
}
11. MT1061 圆锥体的体积
(1)题目描述
请编写一个简单程序,输入圆锥体的半径和高,输出圆锥体的体积。不考虑非法输入。
格式
输入格式: 输入实型,空格分隔。
.
输出格式: 输出实型
样例1
输入格式: 3 5
.
输出格式: 47.123889
(2)参考代码
#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std;
int main( )
{
double r,h,area;
scanf("%lf %lf",&r,&h);
area = PI*r*r*h/3;
printf("%lf",area);
return 0;
}
12. MT1062 圆锥体表面积
(1)题目描述
请编写一个简单程序,输入圆锥体的半径和高,输出圆锥体表面积。不考虑非法输入。(PI= 3.1415926)
格式
输入格式: 输入实型,空格分隔。
.
输出格式: 输出实型
样例1
输入格式: 3 5
.
输出格式: 83.229759
(2)参考代码
#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std;
int main( )
{
double r,h,area;
scanf("%lf %lf",&r,&h);
area = PI*r*r + PI*r*sqrt(h*h+r*r);
printf("%lf",area);
return 0;
}
13. MT1063 立方体的体积
(1)题目描述
输入立方体边长,输出立方体的体积。不考虑非法输入。
格式
输入格式: 输入实型
.
输出格式: 输出实型
样例1
输入格式: 3
.
输出格式: 27.000000
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x,res;
scanf("%lf",&x);
res = pow(x,3);
printf("%lf",res);
return 0;
}
小结(一)
- 极坐标转换范例:MT1052
- 弓形相关公式: MT1054-1065
- 圆锥体表面积合成:MT1062
14. MT1064 立方体的表面积
(1)题目描述
输入立方体边长,输出立方体的表面积。不考虑非法输入。
格式
输入格式: 输入实型
.
输出格式: 输出实型
样例1
输入格式: 3
.
输出格式: 54.000000
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x;
scanf("%lf",&x);
printf("%lf",6*x*x);
return 0;
}
15. MT1065 长方体的表面积
(1)题目描述
输入长方体边长宽高,输出长方体的表面积。不考虑非法输入。
格式
输入格式: 输入实型,空格分隔。
.
输出格式: 输出实型,保留6位小数
样例1
输入格式: a=22,b=b,c=14,d=d
.
输出格式: 22 b 14 d
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x,y,h;
scanf("%lf %lf %lf",&x,&y,&h);
printf("%lf",x*y*2+y*h*2+x*h*2);
return 0;
}
16. MT1066 射线
(1)题目描述
在一条直线上点上N(N>=1)个点可以把这条直线分成多少条射线?N从键盘输入。不考虑负数,O或者其他特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 3
.
输出格式: 6
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
scanf("%d",&n);
printf("%d",2*n);
return 0;
}
17. MT1067 线段
(1)题目描述
有一条直线,线上有n个点(n>=2),请问这条直线会被分隔成多少个线段。n从键盘输入。不考虑负数,0或者其他特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 3
.
输出格式: 3
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
double res;
cin>>n;
if(n==1) res=0;
else if(n==2) res=1;
else res = n*(n-1) /2;
cout << res << endl;
return 0;
}
18. MT1068 直线切平面
(1)题目描述
直线切平面,输入直线条数N,问最多把平面分成几块。比如一条直线可以把一个平面切割成2块。可以使用公式S= n * (n+1)/2+1。不考虑负数,0或者其他特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 5
.
输出格式: 16
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,res;
scanf("%d",&n);
res = n*(n+1)/2 +1;
printf("%d",res);
return 0;
}
19. MT1069 圆切平面
(1)题目描述
n个圆最多把平面分成几部分?输入圆的数量N,问最多把平面分成几块。比如一个圆以把一个平面切割成2块。不考虑负数,0或者其他特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 2
.
输出格式: 4
(2)参考代码
#include <iostream>
using namespace std;
int main( )
{
int n;
cin >> n;
cout << (n*n-n+2);
return 0;
}
20. 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<bits/stdc++.h>
using namespace std;
int main( )
{
int N,K,res;
scanf("%d %d",&N,&K);
res = (2*N+K)/2-N;
printf("%d",res);
return 0;
}
21. MT1071 计算表达式的值
(1)题目描述
请编写一个简单程序,计算45除以2再加上43.41592,然后减去36除以7的商,输出运算结果。
格式
输入格式: 无
.
输出格式: 输出实型
样例1
输入格式: 无
.
输出格式: 60.773063
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
printf("60.773063");
return 0;
}
小结(二)
- 射线范例:MT1066
- 线段范例:MT1067
- 切平面范例:MT1068-1069
22. 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<bits/stdc++.h>
using namespace std;
int main( )
{
double res;
int a,b,c,d;
scanf("%d/%d %d/%d",&a,&b,&c,&d);
printf("%d/%d + %d/%d=%.6lf\n",a,b,c,d,(a*1.0/b+c*1.0/d));
printf("%d/%d - %d/%d=%.6lf\n",a,b,c,d,(a*1.0/b-c*1.0/d));
printf("%d/%d * %d/%d=%.6lf\n",a,b,c,d,((a*1.0/b)*(c*1.0/d)));
printf("%d/%d / %d/%d=%.6lf\n",a,b,c,d,((a*1.0/b)/(c*1.0/d)));
return 0;
}
23. MT1073 时刻求和
(1)题目描述
输入正整数N和M,空格分隔。把他们看作在12小时制的时刻(小时)求和并输出,输出最小列宽为3列。
格式
输入格式: 输入正整数N和M,空格分隔。
.
输出格式: 输出整型
样例1
输入格式: 5 7
.
输出格式: 0
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,m;
scanf("%d %d",&n,&m);
printf("%3d",(n+m)%12);
return 0;
}
24. MT1074 平方根和对数值
(1)题目描述
请编写一个简单程序,计算求给定数的平方根、2个对数值(In,lg)。
格式
输入格式:输入实型
.
输出格式: 输出平方根、对数值,空格分隔,保留两位小数
样例1
输入格式: 5
.
输出格式: 2.24 1.61 0.70
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double n;
cin >> n;
printf("%.2lf ",sqrt(n));
printf("%.2lf ",log(n));
printf("%.2lf",log10(n));
return 0;
}
25. MT1075 平方根X
(1)题目描述
输入正整数N,求N的平方根X。如果N不是一个完美的平方,输出floor(X)。不考虑不合理的输入等特殊情况。
格式
输入格式: 输入正整数N
.
输出格式: 输出整数
样例1
输入格式: 5
.
输出格式: 2
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,x;
scanf("%d",&n);
// x=sqrt(n);
// printf("%d",x);
//法二
cout << floor(sqrt(n)) <<endl; //floor取整函数
return 0;
}
26. MT1076 三维空间两点
(1)题目描述
输入三维空间两点坐标(x,y,z),计算两点之间的距离并输出。
格式
输入格式: 输入实型坐标(x,y,z),空格分隔。每行以一个点。
.
输出格式: 输出实型,保留2位小数。
样例1
输入格式:
-20 20 0
20 -10 0
.
输出格式: 50.00
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x1,y1,z1,x2,y2,z2;
double res;
cin >> x1 >> y1 >> z1;
cin >> x2 >> y2 >> z2;
res = sqrt(pow(x1-x2,2) + pow(y1-y2,2) + pow(z1-z2,2));
printf("%.2lf\n",res);
return 0;
}
27. MT1077 幸运数
(1)题目描述
假定幸运数是只包含4或7的正整数,如7、47。判断一个正整数n是不是一个幸运数。是则输出YES,否则输出NO。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出整型范围的情况。
格式
输入格式: 输入为整型
.
输出格式: 是幸运数则输出YES,否则输出NO
样例1
输入格式: 47
.
输出格式: YES
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
string n;
bool flag=true;
cin >> n;
for(int i=0;i<n.size();i++){
if(n[i]=='4' || n[i]=='7') continue;
else{
flag=false;
break;
}
}
if(flag) printf("YES");
else printf("NO");
return 0;
}
28. MT1078 整除幸运数
(1)题目描述
假定幸运数是只包含4或7的正整数,如7、47。判断一个正整数n是否能被一个幸运数整除。是则输出YES,否则输出NO。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出整型范围的情况。
格式
输入格式: 输入为整型
.
输出格式: 能被一个幸运数整除则输出YES,否则输出NO
样例1
输入格式: 47
.
输出格式: YES
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
//判断所有因数是否全部是4/7
bool is_luck(int i){
while(i){
if(i%10!=4&&i%10!=7) return false;
i/=10;
}
return true;
}
int main( )
{
int x;
scanf("%d",&x);
for(int i=1;i<=x;i++){
if(is_luck(i)&&x%i==0){
printf("YES");
return 0;
}
}
printf("NO");
return 0;
}
29. 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
4 1
5 1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,x=1,y;
scanf("%d",&n);
for(;x<=n;x++){
y = floor(n/x);
printf("%d %d\n",x,y);
}
return 0;
}
30. 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<bits/stdc++.h>
using namespace std;
int main( )
{
int n,x=1,y,sum;
scanf("%d",&n);
for(;x<=n;x++){
y = floor(n/x);
sum += x*y;
}
printf("%d",sum);
return 0;
}
31. 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<bits/stdc++.h>
using namespace std;
int main( )
{
int n,x=1,y,sum;
scanf("%d",&n);
for(;x<=n;x++){
y = floor(n/x);
sum += x+y;
}
printf("%d",sum);
return 0;
}
32. MT1082 x-y的和
(1)题目描述
给定一个正整数n,求满足floor (n/x)=y的x和y的差之和。x,y不考虑负数,O或者其他特殊情况。比如输入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<bits/stdc++.h>
using namespace std;
int main( )
{
int n,x=1,y,sum;
scanf("%d",&n);
for(;x<=n;x++){
y = floor(n/x);
sum += x-y;
}
printf("%d",sum);
return 0;
}
33. MT1083 向下取整
(1)题目描述
输入正整数N,求N的立方根。向下取整后输出,输出最小列宽为3列。
格式
输入格式: 输入正整数N
.
输出格式: 输出整型
样例1
输入格式: 3
.
输出格式: 1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,temp;
scanf("%d",&n);
temp=pow(n,1.0/3);
printf("%3d",temp);
return 0;
}
34. 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<bits/stdc++.h>
using namespace std;
int main( )
{
int N,K,res;
scanf("%d %d",&N,&K);
res=(int)pow(N+1,K)-(int)pow(N,K);
cout<<res<<endl;
return 0;
}
35. MT1085 分期付款
(1)题目描述
请编写一个简单程序,使用以下公式计算每月分期付款:
EMI =p **(1+r)”/ ((1+r)"-1)
其中:
p=本金
r=每月利率
n=分期付款多少个月
如果年利率为R%,则使用以下公式计算月利率:Rate (r) = R/(12*100)
格式
输入格式: 输入本金、年利率、多少个月,double型,空格分隔
.
输出格式: 输出double型,保留1位小数
样例1
输入格式: 1000000 7 120
.
输出格式: 11610.8
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double p,r,n,EMI;
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;
}
36. MT1086 公里转换为米
(1)题目描述
请编写一个简单程序,实现将公里(km)转换为米(m)的转换。
格式
输入格式: 输入实型
.
输出格式:输出实型,保留2位小数
样例1
输入格式: 6.427
.
输出格式: 6.43公里=6427.00米
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x;
scanf("%lf",&x);
printf("%.2lf公里=%.2lf米",x,x*1000);
return 0;
}
37. MT1087 温度转换
(1)题目描述
请编写一个简单程序,实现以摄氏度为单位的温度转换为华氏度,不考虑不合理的输入或是溢出等特殊情况。
格式
输入格式: 输入实型
.
输出格式: 输出实型,保留2位小数,如样例所示。
样例1
输入格式: 37
.
输出格式: 37.00 C=98.60 F
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x;
scanf("%lf",&x);
printf("%.2lf C=%.2lf F",x,x*1.8+32);
return 0;
}
38. MT1088 温度对照
(1)题目描述
输出华氏温度F( -50<=F<200)和摄氏温度C对照表,其计算公式为C=9(F-32)/5。不考虑非法输入等特殊情况。
格式
输入格式: 输入华氏温度F为整型
.
输出格式: 输出摄氏温度C为实型
样例1
输入格式: -50
.
输出格式: -147.600000
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x;
double C;
scanf("%d",&x);
C=(double)9*(x-32)/5;
printf("%lf",C);
return 0;
}
39. MT1089 整理玩具
(1)题目描述
宝宝在整理自己的N个玩具(N<=10),有的抽屉放2个玩具,有的放1个。统计玩具可以多少种方式整理好。注:宝宝分不清抽屉的顺序,所以{1 2 1},{2 1 1},{1 1 2},这样的放置方式被宝宝认为是相同的。
格式
输入格式: 输入正整数N
.
输出格式: 输出整数
样例1
输入格式: 4
.
输出格式: 3
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int num;
cin>>num;
int min = num/2 + num%2;
int total = num-min+1;
cout<<total<<endl;
return 0;
}
40. MT1090 卡罗尔序列
(1)题目描述
卡罗尔数是其值满足4n-2 (n+1) -1的整数(n为正整数)。由卡罗尔数组成的序列叫卡罗尔序列: -1,1,3,5,7...输入正整数N,编写函数,输出第N个卡罗尔数。
格式
输入格式: 输入正整数N(<99999)
.
输出格式: 输出整数
样例1
输入格式: 4
.
输出格式: 5
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
scanf("%d",&n);
printf("%d",4*n-2*(n+1)-1);
return 0;
}
小结(三)
- 时刻求和:MT1073
- 取整函数:floor
- 经典范例:MT1077、MT1078、MT1084(k次方根)、MT1089
41. MT1091 合并||
(1)题目描述
输入两个两位数的正整数a、b,编写程序将a、b合并形成一个整数放在c中,合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上,输出c的结果。
格式
输入格式: 输入整型,空格分隔。
.
输出格式: 输出整型
样例1
输入格式: 12 34
.
输出格式: 4132
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
string a,b;
cin>>a>>b;
int c=(b[1]-'0')*1000+(a[0]-'0')*100+(b[0]-'0')*10+(a[1]-'0');
cout<<c;
return 0;
}
42. MT1092 非常大的N
(1)题目描述
格式
输入格式: 输入为正整数
.
输出格式: 输出为浮点型(保留六位小数)。
样例1
输入格式: 10001
.
输出格式: 50.383855
(2)参考代码
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef unsigned long long ll;
typedef pair<ll,ll> Pll;
int main( )
{
double ans=0;
ll n;
cin>>n;
for(ll i=1; i<=n;i++){
if(i&1) ans+=sqrt(i);
else ans -= sqrt(i);
}
printf("%.6lf\n",ans);
return 0;
}
43. MT1093 序列
(1)题目描述
有一个序列1,3,6,10,15,21...,请找出它的规律,输入整数N,输出第N项。不考虑负数,O或者其他特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 4
.
输出格式: 10
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,sum=1;
scanf("%d",&n);
for(int i=2;i<=n;i++){
sum+=i;
}
printf("%d",sum);
return 0;
}
44. MT1094 AP数列
(1)题目描述
输入AP数列(正整数)的前两项A1、A2和n。输出序列的第n项。不考虑负数,0或者其他特殊情况。
格式
输入格式: 输入为整型,空格分隔
.
输出格式: 输出为整型
样例1
输入格式: 2 3 4
.
输出格式: 5
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b,n;
cin >> a >> b >> n;
cout<<(b+(n-2)*(b-a))<<endl;
return 0;
}
45. MT1095 GP数列
(1)题目描述
输入GP数列(正整数)的前两项A1、A2和n。输出序列的第n项。不考虑负数,0或者其他特殊情况。
格式
输入格式:输入为整型,空格分隔
.
输出格式: 输出为整型
样例1
输入格式:1 3 4
.
输出格式: 27
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b,n;
cin >> a >> b >> n;
cout<<a*pow(b/a,n-1)<<endl;
return 0;
}
46. MT1096 三角形斜边
(1)题目描述
假定直角三角形的斜边是固定长度的,输入三角形的最大可能面积,输出斜边的长度。比如最大面积为25的直角三角形,斜边的长度是10。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出数据范围的情况。
格式
输入格式: 输入为整型
.
输出格式: 输入出整型
样例1
输入格式:21
.
输出格式:9
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin>>n;
cout<<floor(sqrt(n*4))<<endl;
return 0;
}
47. MT1097 小码哥的生日
(1)题目描述
小码哥过生日,妈妈给她买了一个很大的蛋糕,小码哥开始给朋友们分蛋糕,如果切n刀,最多可以分给多少小朋友呢?每个朋友一块蛋糕。不考虑负数,0或者其他特殊情况。n从键盘输入。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 4
.
输出格式: 11
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin>>n;
cout<<n*(n+1)/2+1<<endl;
return 0;
}
48. MT1098 完全平方数
(1)题目描述
输入一个正整数n,检查它是否为完全平方数。不考虑0,负数或者其他特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为YES或者NO
样例1
输入格式:35
.
输出格式:NO
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n,ans;
bool flag = false;
cin >> n;
int i=1;
while(ans<n){
ans = i*i;
if(ans == n) flag = true;
i++;
}
if(flag) cout << "YES" <<endl;
else cout << "NO" <<endl;
return 0;
}
49. MT1099 个人所得税
(1)题目描述
将个人所得税算法定义为宏。个人所得税计算公式为︰应纳税所得额sx税率–速算扣除数。不考虑不合理的输入或是溢出等特殊情况。税率如下表:
格式
输入格式:输入为整型
.
输出格式:输出为整型
样例1
输入格式:500
.
输出格式:25
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double num;
cin >> num;
double m=0,n=0;
if(num <= 500){
m = 0.05;
n = 0;
}
if(num > 500 && num <=2000){
m=0.1;
n=25;
}
if(num > 2000 && num <=5000){
m=0.15;
n=125;
}
if(num>5000 && num<=20000){
m=0.2;
n=375;
}
if(num>20000 && num <=40000){
m=0.25;
n=1375;
}
if(num > 40000 && num<=60000){
m=0.3;
n=3375;
}
if(num > 60000 && num <= 80000){
m=0.35;
n=6375;
}
if(num > 80000 && num<=100000){
m=0.4;
n=10375;
}
if(num>100000){
m=0.45;
n=15375;
}
cout<<num*m-n<<endl;
return 0;
}
50. MT1100 带参数的宏
(1)题目描述
请编写一个简单程序,把f(x)=(x*x)定义成带参数的宏,计算f(9)/f(6)并输出结果。
格式
输入格式:无
.
输出格式: 输出为实型
样例1
输入格式:无
.
输出格式:2.250000
(2)参考代码
#include<bits/stdc++.h>
#define f(x)(x*x)
using namespace std;
int main( )
{
printf("%lf",(double)f(9)/(double)f(6));
return 0;
}
小结(四)
- AP:等差数列、GP:等比数列
- 直角三角形斜边上的高等于斜边的一半
- 带参数的宏:MT1100
- 经典范例:MT1094、MT1096、MT1100
结语
近期会逐步将码题集题库中的新手村600题刷完,预计每天会更新50题,之后会逐步跟进黄金,钻石,星耀,王者的题,尽请期待!!!
同时,也希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?
另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from=333.999.0.0,供大家更好的进行学习与刷题~( ̄▽ ̄~)~
愿你的结局,配得上你一路的颠沛流离。