算法竞赛入门【码蹄集新手村600题】(MT1001-1050)
前言
为什么突然想学算法了?
> 用较为“官方”的语言讲,是因为算法对计算机科学的所有分支都非常重要。 在绝大多数的计算机科学分支领域中,要想完成任何实质性的工作,理解算法的基础知识并掌握与算法密切相关的数据结构知识是必不可少的。
> 但从实际而言,是因为当下快到了考研和找工作的年纪(ಥ_ಥ),无论走哪一条路,都不免需要一些相对丰富的算法知识,是故,便产生了一个暑假速成算法的计划,可能对于像我这种算法竞赛小白而言,几乎很难,但我仍然还是想尝试一下,毕竟,梦想还是要有的,万一实现了呢?~( ̄▽ ̄~)~
为什么选择码蹄集作为刷题软件?
码蹄集,是在全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC) 指导下建设的,其依托全国各大名校计算机系和清华大学出版社等单位的强大资源,旨在为计算机学习爱好者提供全面和权威的计算机习题。
目录
1. MT1001 程序设计入门
(1)题目描述
欢迎来到程序设计的世界,请编写一个简单程序,输出2行字符,第一行为“Thisis my first program!”,第二行为“Coding is fun!"
欢迎来到程序设计的世界,请编写一个简单程序,输出2行字符,第一行为“这是我的第一个程序!”,第二行为“编码很有趣!”
格式
输入格式:无
.
输出格式:第一行为“This is my first program!”,第二行为“Coding is fun!"
样例1
输入格式:无
.
输出格式:
This is my first program!
Coding is fun!
(2)参考代码
#include<stdio.h>
int main()
{
printf("This is my first program!\n");
printf("Coding is fun!");
return 0;
}
2. MT1002 输入和输出整型数据
(1)题目描述
请编写一个简单程序,用户输入一个整数存储在变量中,并输出在屏幕上。
格式
输入格式:一个整型数据
.
输出格式:输出You entered:刚才输入的整型数据
样例1
输入格式:3
.
输出格式: You entered:3
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x;
cin>>x;
printf("You entered:%d",x);
return 0;
}
3. MT1003 整数运算
(1)题目描述
请编写一个简单程序,用户输入2个整型数据存储在变量中,并输出他们的和与差。
格式
输入格式:2个整型数据,用逗号分隔
.
输出格式:输出分两行,分别输出他们的和与差
样例1
输入格式:3,5
.
输出格式:
.
3+5=8
3-5=-2
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x,y;
scanf("%d,%d",&x,&y);
printf("%d+%d=%d\n",x,y,x+y);
printf("%d-%d=%d",x,y,x-y);
return 0;
}
4. MT1004 求余
(1)题目描述
请编写一个简单程序,用户输入2组整型数据存储在变量中,并输出两组数相除的余数。(不考虑除数为0)
格式
输入格式:输入2组整型数据,用空格分隔
.
输出格式:输出分两行,分别输出两组数相除的余数
样例1
输入格式:
8 2
-9 7
.
输出格式:
8%2=0
-9%7=-2
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x,y,z,w;
scanf("%d %d",&x,&y);
scanf("%d %d",&z,&w);
printf("%d%%%d=%d\n",x,y,x%y);
printf("%d%%%d=%d",z,w,z%w);
return 0;
}
5. MT1005 输入和输出实型数据
(1)题目描述
请编写一个简单程序,用户输入一个float型数据和一个double型数据,存储在变量中,并输出在屏幕上。
格式
输入格式:第一个是float型数据,第二个是double型数据,用空格分隔
.
输出格式:输出You entered:... and ..(...处依序输出刚才输入的数据),第一个float型数据保留2位小数,第二个double型数据保留3位小数
样例1
输入格式:3.1234 4.5
.
输出格式: You entered:3.12 and 4.500
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
float x;
double y;
scanf("%f %lf",&x,&y);
printf("You entered:%.2f and %.3f",x,y);
return 0;
}
6. MT1006 实型数运算
(1)题目描述
请编写一个简单程序,用户输入2个实型数据存储在变量中,并输出他们的乘积与商。(本题不考虑除数为0的情况)
格式
输入格式:2个实型数据,用空格分隔
.
输出格式:输出分两行,分别输出他们的乘积与商
样例1
输入格式:3.1 4.2
.
输出格式:
3.100000*4.200000=13.020000
3.100000/4.200000=0.738095
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x,y;
scanf("%lf %lf",&x,&y);
printf("%.6f*%.6f=%.6f\n",x,y,x*y);
printf("%.6f/%.6f=%.6f",x,y,x/y);
return 0;
}
7. MT1007 平均分
(1)题目描述
输入一名学生的C++、python和C语言成绩,输出总分和和平均分。不考虑不合理的输入或是溢出等特殊情况。
格式
输入格式: 输入为实型,空格分隔
.
输出格式: 输出为实型,保留6位小数
样例1
输入格式: 95 87.5 66
.
输出格式:
248.500000
82.833333
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x,y,z;
scanf("%lf %lf %lf",&x,&y,&z);
printf("%.6f\n",x+y+z);
printf("%.6f",(x+y+z)/3);
return 0;
}
8. MT1008 圆球等的相关运算
(1)题目描述
请编写一个简单程序,输入半径和高,输出圆周长,圆面积,球面积,球体积,圆柱体积。(PI= 3.1415926)
格式
输入格式: 输入为double型
.
输出格式: 分行输出,保留2位小数
样例1
输入格式: 1.5 3
.
输出格式:
9.42
7.07
28.27
14.14
21.21
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double r,h;
double PI=3.1415926;
scanf("%lf %lf",&r,&h);
printf("%.2f\n",2*r*PI);
printf("%.2f\n",PI*r*r);
printf("%.2f\n",4*PI*r*r);
printf("%.2f\n",PI*r*r*r*4/3);
printf("%.2f\n",PI*r*r*h);
return 0;
}
9. MT1009 公式计算
(1)题目描述
计算公式
(1/2) (ax+(a+x)/(4* a))
格式
输入格式: 输入为整型x,a,空格分隔
.
输出格式: 输出为实型,保留2位小数
样例1
输入格式: 1 1
.
输出格式: 0.75
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x,a;
float y;
scanf("%d %d",&x,&a);
y=0.5*(a*x+(a+x)/(4.0*a));
printf("%.2f",y);
return 0;
}
10. MT1010 输入和输出字符型数据
(1)题目描述
请编写一个简单程序,用户输入2个的字符型数据存储在变量中,并分别以字符形式和整数形式输出在屏幕上。
格式
输入格式: 2个的字符型数据,用逗号分隔
.
输出格式: 输出两行The ASCll code of... is ...(...处依次输出刚才输入的数据字符形式和整数形式)
样例1
输入格式: A,B
.
输出格式:
The ASCII code of A is 65
The ASCII code of B is 66
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char a,b;
scanf("%c,%c",&a,&b);
printf("The ASCII code of %c is %d\n",a,a);
printf("The ASCII code of %c is %d",b,b);
return 0;
}
11. MT1011 字符和整数
(1)题目描述
输出’X'’、65的字符、十进制数据形式。
格式
输入格式: 无
.
输出格式: 输出字符、十进制整数,空格分隔
样例1
输入格式: 无
.
输出格式:
X 88
A 65
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
printf("X %d\nA %d",(int)'X',(int)'A');
return 0;
}
12. MT1012 各种类型长
(1)题目描述
请编写一个简单程序,输出int、float、double和char的大小。
格式
输入格式: 无
.
输出格式: 输出分4行,分别输出int、float、double和char的大小
样例1
输入格式: 无
.
输出格式:
Size of int: 4 bytes
Size of float: 4 bytes
Size of double: 8 bytes
Size of char: 1 byte
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
printf("Size of int: %d bytes\n",sizeof(int));
printf("Size of float: %d bytes\n",sizeof(float));
printf("Size of double: %d bytes\n",sizeof(double));
printf("Size of char: %d byte\n",sizeof(char));
return 0;
}
13. MT1013 关键字long
(1)题目描述
请编写一个简单程序,输出int、long int、long long int、double和longdouble的大小。
格式
输入格式: 无
.
输出格式: 输出分5行,分别输出int、long int、 long long int、double和long double的大小
样例1
输入格式: 无
.
输出格式:
Size of int = 4 bytes
Size of long int = 8 bytes
Size of long long int = 8 bytes
Size of double = 8 bytes
Size of long double = 16 bytes
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
printf("Size of int = %d bytes\n",sizeof(int));
printf("Size of long int = %d bytes\n",sizeof(long int));
printf("Size of long long int = %d bytes\n",sizeof(long long int));
printf("Size of double = %d bytes\n",sizeof(double));
printf("Size of long double = %d bytes\n",sizeof(long double));
return 0;
}
小结(一)
- 转字符:(char)65
- 转整数: (int)'X'
- 算大小:sizeof(int) //4 bytes
14. MT1014 日期
(1)题目描述
编写一个程序,以月/日/年(mm/dd/yyyy)的形式输入日期(其中月,日为1-2位整数,年为1-4位整数),然后以yyyymmdd的形式显示(其中月,日为2位整数,年为4位整数)。不考虑不合理的输入或是溢出等特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 4/1/2019
.
输出格式: 20190401
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b,c;
scanf("%d/%d/%d",&a,&b,&c);
printf("%.4d%.2d%.2d",c,a,b);
return 0;
}
15. MT1015 输入分隔符
(1)题目描述
输入“a=22,b=b,c=14,d=d”给变量a、b、c、d,然后再输出他们。
格式
输入格式: a=22,b=b,c=14,d=d
.
输出格式: 空格分隔
样例1
输入格式: a=22,b=b,c=14,d=d
.
输出格式: 22 b 14 d
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,c;
char b,d;
scanf("a=%d,b=%c,c=%d,d=%c",&a,&b,&c,&d);
printf("%d %c %d %c",a,b,c,d);
return 0;
}
16. MT1016 宽度与对齐
(1)题目描述
输出455、-123、987654,宽度为5,分别左对齐和右对齐
格式
输入格式: 无
.
输出格式: 输出为整型,空格分隔。每个数的输出占一行
样例1
输入格式: 无
.
输出格式:
455 455
-123 -123
987654 987654
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,c;
char b,d;
scanf("a=%d,b=%c,c=%d,d=%c",&a,&b,&c,&d);
printf("%d %c %d %c",a,b,c,d);
return 0;
}
17. MT1017 左右对齐
(1)题目描述
输出3.1415926、22.3456,宽度为14,精度为6,分别左对齐和右对齐。
格式
输入格式: 无
.
输出格式: 输出为实型,空格分隔。每个数的输出占一行。
样例1
输入格式: 无
.
输出格式:
3.141593 3.141593
22.345600 22.345600
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
printf("%-14.6f %14.6f\n",3.141593,3.141593);
printf("%-14.6f %14.6f\n",22.345600,22.345600);
return 0;
}
18. MT1018 输入宽度
(1)题目描述
输入123456789给变量a1、a2、a3,宽度为3,然后输出a1、a2、a3,空格分隔。
格式
输入格式: 123456789
.
输出格式: 输出为整型,空格分隔。
样例1
输入格式: 123456789
.
输出格式: 123 456 789
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a1,a2,a3;
scanf("%3d%3d%3d",&a1,&a2,&a3);
printf("%3d %3d %3d",a1,a2,a3);
return 0;
}
19. MT1019 宽度精度
(1)题目描述
输出18.16054、17.676767,宽度和精度由输入决定,右对齐。
格式
输入格式: 输入为宽度和精度整型,空格分隔。
.
输出格式: 输出为实型,空格分隔。
样例1
输入格式: 6 3
.
输出格式: 18.161 17.677
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int m,n;
cin>>m>>n;
cout<<setw(m)<<fixed<<setprecision(n)<<18.16054<<" "<<setw(m)<<setprecision(n)<<17.676767<<endl;
return 0;
}
20. MT1020 %s格式符
(1)题目描述
输入字符串,然后输出前3个字符,要求占6列,右对齐。
格式
输入格式: 输入字符串
.
输出格式: 输出字符串
样例1
输入格式: Wendy
.
输出格式: Wen
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char str[20];
cin.getline(str,4);
cout<<setw(6)<<right<<str<<endl;
return 0;
}
21. MT1021 %f格式符
(1)题目描述
输入一个实数,第一次按实型输出;第二次保留2位小数输出;第三次保留3位小数但最小列宽8列输出,空格分隔。
格式
输入格式: 输入实型
.
输出格式: 输出实型,空格分隔。
样例1
输入格式: 31331.14345435
.
输出格式: 31331.143454 31331.14 31331.143
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double a;
cin >> a;
cout << fixed << setprecision(6) << a << " " << fixed <<
setprecision(2) << a << " " << fixed << setprecision(3) << setw(8) << a << endl;
return 0;
}
小结(二)
- 宽度:setw() 、精度:setprecision() 、左右对齐,宽度为14,精度为6:%14.6f、混合编译:fixed
- 输入字符串,然后输出前3个字符,右对齐:
char str[20];
cin.getline(str,4);
cout<<setw(6)<<right<<str<<ebdl;
22. MT1022 小数、指数
(1)题目描述
输出3.1415926、12345678.123456789的小数、指数形式。
格式
输入格式: 无
.
输出格式: 输出为实型,空格分隔。
样例1
输入格式: 无
.
输出格式:
.
3.141593 3.141593e+000
12345678.123457 1.234568e+007
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double a = 3.1415926, b = 12345678.123456789;
printf("%lf ",a);
int i;
for(i=-1;a>1;i++) a/=10;
printf("%lfe+%03d\n",a*10,i);
printf("%lf ",b);
for(i=-1;b>1;i++) b /= 10;
printf("%lfe+%03d\n",b*10,i);
return 0;
}
23. MT1023 进制乱炖
(1)题目描述
输入一个正整数,输出它的十进制形式、八进制形式、十六进制形式(小写)、无符号的十进制形式,空格分隔。
格式
输入格式: 输入整型,空格分隔。
.
输出格式: 输出整型,空格分隔。
样例1
输入格式: 33
.
输出格式: 33 41 21 33
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a;
scanf("%d",&a);
printf("%d %o %x %u\n",a,a,a,a);
return 0;
}
24. MT1024 进制形式
(1)题目描述
分别输出128、456789的十进制、八进制、十六进制(字母大写)数据形式。
格式
输入格式: 无
.
输出格式: 输出为整型,空格分隔。
样例1
输入格式: 无
.
输出格式:
128 200 80
456789 1574125 6F855
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a = 128,b=456789;
printf("%d %o %X\n",a,a,a);
printf("%d %o %X\n",b,b,b);
return 0;
}
25. MT1025 八、十六进制
(1)题目描述
输出202、117、70、130的十进制、八进制、十六进制数据形式,结果为Oddddd或0Xddddd。
格式
输入格式: 无
.
输出格式: 输出为整型,空格分隔。每个数的输出占一行。
样例1
输入格式: 无
.
输出格式:
202 0312 0XCA
117 0165 0X75
70 0106 0X46
130 0202 0X82
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a=202,b=117,c=70,d=130;
printf("%d %.4o 0X%X\n",a,a,a);
printf("%d %.4o 0X%X\n",b,b,b);
printf("%d %.4o 0X%X\n",c,c,c);
printf("%d %.4o 0X%X\n",d,d,d);
return 0;
}
26. MT1026 合并
(1)题目描述
已知a、b、c是一个十进制数的百位、十位、个位,求这个十进制数。
格式
输入格式: 输入为正整型a、b、c,空格分隔
.
输出格式: 输出为整型
样例1
输入格式: 1 3 4
.
输出格式: 134
备注
注意这里所有整数的范围应该使用32位整数存储(如在c/C++下应使用int)。
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d%d%d",a,b,c);
return 0;
}
27. MT1027 整数逆序
(1)题目描述
编写一个程序,要求输入一个两位数的数字,然后逆序输出数字。不考虑不合理的输入或是溢出等特殊情况。
格式
输入格式: 输入正整数
.
输出格式: 输出为逆序后的字符串
样例1
输入格式: 28
.
输出格式: 82
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b,c;
scanf("%d",&a);
b=a/10;
c=a%10;
a=b+c*10;
printf("%.2d",a);
return 0;
}
28. MT1028 四位数逆序
(1)题目描述
将一个四位数正整数(如1278)逆序(如8721)输出。不考虑负数等特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为逆序后的字符串
样例1
输入格式: 1234
.
输出格式: 4321
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
char a[4];
cin>>a;
for(int i=3;i>=0;i--){
cout<<a[i];
}
cout<<endl;
return 0;
}
29. MT1029 位数
(1)题目描述
编写一个程序,计算一个数字包含多少位数。您可以假定该数字不超过四位数。本题不考虑负数或者其他特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 87
.
输出格式: 2
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,num=0;
scanf("%d",&a);
if(a==0) num=1;
while(a){
a=a/10;
num++;
}
printf("%d",num);
return 0;
}
30. MT1030 最大公约数
(1)题目描述
请编写一个简单程序,输入2个整数,输出他们的最大公约数。不考虑负数,0或者其他特殊情况。
格式
输入格式: 输入为整型,空格分隔
.
输出格式: 输出为整型
样例1
输入格式: 3 5
.
输出格式: 1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x=0,y=0,c=0;
scanf("%d%d",&x,&y);
c=(x>y)?y:x;
while((x%c !=0) || (y%c !=0)) c--;
printf("%d",c);
return 0;
}
31. MT1031 最简分数
(1)题目描述
编写一个程序,输入一个分数,然后输出它的最简分数。不考虑负数,0或者其他特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 3/6
.
输出格式: 2/1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b;
scanf("%d/%d",&a,&b);
int gcd = __gcd(a,b);
printf("%d/%d",a/gcd,b/gcd);
return 0;
}
32. MT1032 最小公倍数
(1)题目描述
请编写一个简单程序,输入2个整数,输出他们的小公倍数。不考虑负数,0或者其他特殊情况。
格式
输入格式: 输入为整型,空格分隔
.
输出格式: 输出为整型
样例1
输入格式: 3 5
.
输出格式: 15
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a=0,b=0;
scanf("%d %d\n",&a,&b);
cout<<(a*b)/__gcd(a,b)<<endl;
return 0;
}
33. MT1033 多项式计算
(1)题目描述
计算公式
格式
输入格式: 输入为整型x
.
输出格式: 输出为整型
样例1
输入格式: 1
.
输出格式: 10
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x,sum;
scanf("%d",&x);
sum=pow(x,6)-2*pow(x,5)+3*pow(x,4)-5*pow(x,2)+6*x+7;
printf("%d",sum);
return 0;
}
34. MT1034 偶数平方
(1)题目描述
编写一个程序,输入数字n,然后打印1和n之间的哪些是偶数平方的数。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出整型范围的情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型,每个字数占一行
样例1
输入格式: 100
.
输出格式:
4
16
36
64
100
备注
n大于等于4
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
scanf("%d",&n);
for(int i=4;i<=n;i+=2){
for(int j=2;j*j<=i;j+=2)
if(i==j*j) printf("%d\n",i);
}
return 0;
}
35. MT1035 奇数平方
(1)题目描述
编写一个程序,输入数字n,然后打印1和n之间的那些是奇数平方的数。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出整型范围的情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型,每个字数占一行
样例1
输入格式: 100
.
输出格式:
1
9
25
49
81
备注
n大于等于1
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i+=2){
for(int j=1;j*j<=i;j+=2)
if(i==j*j) printf("%d\n",i);
}
return 0;
}
36. MT1036 和的立方
(1)题目描述
输入为整数x,y,求x、y之和的立方。不考虑溢出等特殊情况。
格式
输入格式: 输入为整型,空格分隔
.
输出格式: 输出为整型
样例1
输入格式: 1 3
.
输出格式: 64
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x,y,sum;
scanf("%d %d",&x,&y);
sum=x+y;
sum=pow(sum,3);
printf("%d",sum);
return 0;
}
37. MT1037 绝对值
(1)题目描述
输入数字a并计算a的绝对值。不考虑不合理的输入或是溢出等特殊情况。
格式
输入格式: 输入实型数字a
.
输出格式: 输出a的绝对值,输出为实型
样例1
输入格式: -5.1
.
输出格式: 5.100000
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double a,res;
scanf("%lf",&a);
res=abs(a);
printf("%lf",res);
//法二
// if(a<0) a=-a;
// else if(a==0) a=0;
// printf("%lf",a);
return 0;
}
38. MT1038 交换输出
(1)题目描述
请编写一个简单程序,输入两个整数a,b,交换他们的值并输出。
格式
输入格式: 输入为int,空格分隔
.
输出格式: 输出为int,空格分隔
样例1
输入格式: 3 5
.
输出格式: 5 3
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d %d",b,a);
return 0;
}
39. MT1039 偶数位
(1)题目描述
输入一个数字N,把偶数位置的所有数更改为0。比如30,二进制形式是11110,替换后是01010,则输出对应的十进制整数10。最右边是第0位,从右向左依次为0位,1位等等。不考虑非法输入等特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 30
.
输出格式: 10
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin>>n;
int a[100];
while(n!=0){
for(int i=0;i<100;i++){
a[i] = n%2;
n/=2;
}
}
for(int i=0;i<100;i++){
if(i%2==0){
a[i]=0;
}else continue;
}
int temp=0;
for(int i=0;i<100;i++) temp+=a[i]*pow(2,i);
cout<<temp<<endl;
return 0;
}
40. MT1040 奇数位
(1)题目描述
输入一个数字N,把奇数位置的所有数更改为0。比如30,二进制形式是11110,替换后是10100,则输出对应的十进制整数20。最右边是第0位,从右向左依次为0位,1位等等。不考虑非法输入等特殊情况。
格式
输入格式: 输入为整型
.
输出格式: 输出为整型
样例1
输入格式: 30
.
输出格式: 20
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n;
cin>>n;
int a[100];
while(n!=0){
for(int i=0;i<100;i++){
a[i] = n%2;
n/=2;
}
}
for(int i=0;i<100;i++){
if(i%2!=0){
a[i]=0;
}else continue;
}
int temp=0;
for(int i=0;i<100;i++) temp+=a[i]*pow(2,i);
cout<<temp<<endl;
return 0;
}
小结(三)
- 指数转换输出范例:MT1022
- 进制输出:
十进制:%d
八进制:%o %O(字母大写)
十六进制:%x %X(字母大写)
无符号:%u
- 字符串逆序输出整数范例:MT2028
- 最大公约数范例:MT1030
- 最简分数范例:MT1031
- 最小公倍数=两数相乘/最大公约数
- 偶数平方范例:MT1034
- pow函数返回的是double类型变量,用%d输出会出现存储上的问题,如前n个数对应的int为0
- 偶数位:MT1039,按位与算法,提示如下:
0xaaaaaaaa = 10101010101010101010101010101010(偶数位为1,奇数位为0 )
0x55555555 = 1010101010101010101010101010101(偶数位为0,奇数位为1 )
0x33333333 = 110011001100110011001100110011(1和0每隔两位交替出现)
0xcccccccc = 11001100110011001100110011001100(0和1每隔两位交替出现)
0x0f0f0f0f = 00001111000011110000111100001111 (1和0每隔四位交替出现)
0xf0f0f0f0 = 11110000111100001111000011110000 (0和1每隔四位交替出现)
41. MT1041 求圆面积和周长
(1)题目描述
请编写一个简单程序,输入半径,输出圆面积和周长。(PI是3.1415926)
格式
输入格式: double型
.
输出格式: 分2行输出圆面积和周长,保留6位小数
样例1
输入格式: 5
.
输出格式:
Area=78.539815
Circumference=31.415926
(2)参考代码
#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std;
int main( )
{
double r;
scanf("%lf",&r);
printf("Area=%lf\nCircumference=%lf",PI*r*r,2*PI*r);
return 0;
}
42. MT1042 求矩形的面积和周长
(1)题目描述
请编写一个简单程序,输入矩形的长度和宽度,输出矩形的面积和周长。
格式
输入格式: 实型,空格分隔
.
输出格式: 分2行输出矩形的面积和周长,保留6位小数
样例1
输入格式: 3 5
.
输出格式:
Area=15.000000
Perimeter=16.000000
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x,y;
scanf("%lf %lf",&x,&y);
printf("Area=%lf\nPerimeter=%lf",x*y,2*(x+y));
return 0;
}
43. MT1043 椭圆计算
(1)题目描述
请编写一个简单程序,输入长半轴和短半轴长度,计算输出椭圆的面积。(PI是3.1415926)
格式
输入格式: double型,空格分隔
.
输出格式: 输出椭圆的面积,保留6位小数
样例1
输入格式: 5 3
.
输出格式: Area = 47.123889
(2)参考代码
#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std;
int main( )
{
double x,y;
scanf("%lf %lf",&x,&y);
printf("Area = %lf",x*PI*y);
return 0;
}
44. MT1044 三角形面积
(1)题目描述
请编写一个简单程序,计算给定底面和高度的三角形面积。
格式
输入格式: 输入float型,空格分隔
.
输出格式: 输出三角形的面积,保留2位小数
样例1
输入格式: 5.1 3.3
.
输出格式: Area=8.41
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
float x,y;
scanf("%f %f",&x,&y);
printf("Area=%.2f",x*y/2);
return 0;
}
45. MT1045 平行四边形
(1)题目描述
请编写一个简单程序,输入平行四边形底和高,输出平行四边形面积。不考虑非法输入。
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型
样例1
输入格式:3 5
.
输出格式: 15.000000
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x,y;
scanf("%lf %lf",&x,&y);
printf("%lf",x*y);
return 0;
}
46. MT1046 菱形
(1)题目描述
输入菱形的两个对角线的长度,输出菱形面积。
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型,保留2位小数。
样例1
输入格式:4 14
.
输出格式:28.00
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x,y;
scanf("%lf %lf",&x,&y);
printf("%.2lf",x*y/2);
return 0;
}
47. MT1047 梯形
(1)题目描述
输入梯形的两个底的长度和高,输出梯形面积。
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型,保留2位小数。
样例1
输入格式:3 5 6
.
输出格式:24.00
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
double x,y,z;
scanf("%lf %lf %lf",&x,&y,&z);
printf("%.2lf",(x+y)*z/2);
return 0;
}
48. MT1048 扇形面积
(1)题目描述
输入扇形的半径r和圆心角度数n°,输出扇形面积。不考虑非法输入。(Pl=3.1415926)
格式
输入格式: 输入实型,空格分隔
.
输出格式: 输出实型
样例1
输入格式:12 90
.
输出格式:113.097334
(2)参考代码
#include<bits/stdc++.h>
#define PI 3.1415926
using namespace std;
int main( )
{
double r,n;
scanf("%lf %lf",&r,&n);
printf("%lf",r*r*PI*n/360);
return 0;
}
49. MT1049 三角形坐标
(1)题目描述
输入三角形三个顶点A,B,C的坐标(x,y),根据公式计算并输出三角形面积。S=1/2* |x1y2+x2y3+x3y1-x1y3-x2y1-x3y2|
格式
输入格式:依次输入三个顶点A,B,C的坐标(x,y),整型,空格分隔。
.
输出格式: 输出实型,保留2位小数。
样例1
输入格式:0 1 0 0 1 0
.
输出格式:0.50
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x1,y1,x2,y2,x3,y3;
double sum;
scanf("%d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3);
sum = (double)abs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)*1/2;
printf("%.2f",sum);
return 0;
}
50. MT1050 空间三角形
(1)题目描述
输入在三维空间的三角形三个顶点A,B,C的坐标(x,y,z),计算并输出三角形面积。不考虑不能构成三角形的特殊情况。
格式
输入格式:依次输入三个顶点A,B,C的坐标(x,y,z),整型,空格分隔。
.
输出格式: 输出实型,保留2位小数。
样例1
输入格式:0 0 0 0 0 3 3 0 0
.
输出格式:4.50
(2)参考代码
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int x1,x2,x3,y1,y2,y3,z1,z2,z3;
double a,b,c,p;
scanf("%d %d %d %d %d %d %d %d %d",&x1,&y1,&z1,&x2,&y2,&z2,&x3,&y3,&z3);
a=sqrt(pow(x1-x2,2)+pow(y1-y2,2)+pow(z1-z2,2));
b=sqrt(pow(x1-x3,2)+pow(y1-y3,2)+pow(z1-z3,2));
c=sqrt(pow(x3-x2,2)+pow(y3-y2,2)+pow(z3-z2,2));
p=1.0/2*(a+b+c);
printf("%.2lf",sqrt(p*(p-a)*(p-b)*(p-c)));
return 0;
}
//海伦公式:s=sqrt(p*(p-a)*(p-b)*(p-c)) p=1.0/2*(a+b+c)
小结(四)
- 椭圆面积=长半轴短半轴PI
- 空间三角形面积:调用海伦公式【s=sqrt(p(p-a)(p-b)(p-c)) ,其中p=1.0/2(a+b+c)】
结语
近期会逐步将码蹄集题库中的新手村600题刷完,预计每天会更新50题,之后会逐步跟进黄金,钻石,星耀,王者的题,尽请期待!!!
同时,也希望这些题能帮助到大家,一起进步,祝愿每一个算法道路上的“苦行僧”们,都能够历经磨难,终成正果,既然选择了这条路,走到了这里,中途放弃,岂不是太过可惜?
另附中国计算机学会的杰出会员、常务理事轩哥博士的B站视频讲解链接https://space.bilibili.com/518554541/?spm_id_from=333.999.0.0,供大家更好的进行学习与刷题~( ̄▽ ̄~)~
愿你的结局,配得上你一路的颠沛流离。