OJ算法题共10个篇幅,不定期在篇幅里增加题目(篇幅不增加)。
个人水平有限,如有错误和可以改进的地方,非常期待批评指正,谢谢!
题目描述
输入底面半径r
和高h,输出圆柱体的表面积,保留三位小数,格式参考样例。
π使用3.14。r,h≠0
输入
输入两个数r,h
。用空格分开。
输出
输出表面积,格式为"Area = %.3f"(注意空格)
输入样例
3.5 9
输出样例
Area = 274.750
#include<stdio.h>
int main()
{
float r,h,a;
scanf("%f%f",&r,&h);
a=2*3.14*r;
printf("Area = %.3f",(a*h)+(2*3.14*r*r));
return 0;
}
题目描述
输入一个三位数,分类出它的百位、十位和个位。
个位数≠0
。
输入
一个三位数。
输出
反转后的三位数。
输入样例
127
输出样例
721
HINT
个位数 = a%10, 十位数 = (a/10)%10 百位数 = a/100.
还有种用字符变量做的方法,你能想到吗?
#include<stdio.h>
int main()
{
int n,a,b,c;
scanf("%d",&n);
a=n/100;
b=(n/10)%10;
c=n%10;
printf("%d\n",c*100+b*10+a);
return 0;
}
题目描述
Tarpe酋长最近很烦,因为要谋求连任,必须满足部落的太平天国梦想——平均土地,但是三家大地主掌控了Tarpe酋长的所有土地,请你帮酋长计算一下这三家地主平均后的土地是多少呢
输入
一行,三个数 a,b,c
,分别是三个地主现在拥有的土地,由于丈量精度问题,都是小数。
输出
输出一行,a,b,c
的平均值,保留一位小数
输入样例
1 2 3
输出样例
2.0
HINT
Tarpe酋长只想求个平均值而已,别多想
#include<stdio.h>
int main()
{
float a,b,c;
scanf("%f%f%f",&a,&b,&c);
printf("%.1f",(a+b+c)/3);
return 0;
}
题目描述
柯南在追捕犯人的时候掉入了没有井盖的深井,万幸他有阿笠博士发明的吸盘,但吸盘在掉下来的时候摔坏了,他每个小时能爬上一段距离。但在他休息的一瞬间中会滑下一段距离,幸运的是每隔一段距离有凹槽(自下而上)可以让柯南停止下滑,柯南需要编写代码来判断在自己能否爬出深井以及需要的时间,于是柯南开始敲代码。
输入
n组测试数据。
第一行为一个整数n,表示组数
第二行为一个整数a,表示井的深度。
第三行为一个整数b,表示柯南每小时爬的距离。
第四行为一个整数c,表示柯南每小时滑下的距离。
第五行为一个整数d,表示隔多少米有凹槽。
n,a,b,c,d均小于3000。
输出
每行输出一个结果。
若不能爬出深井,则输出"fail",
若能爬出深井,则输出爬出深井需要的时间。
输入样例
3
600 131 25 50
500 131 25 50
300 100 118 120
输出样例
6
5
fail
//简化:
#include<stdio.h>
#define min(x,y)(x<y?x:y)
int main(){
int n,h=0,up=0,down=0,keng=0,t,sum,cha=0;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d%d%d%d",&h,&up,&down,&keng);
if(up<min(down,keng)){
printf("fail\n");
}
else{
sum=0;
t=0;
while(sum<h){
t++;
sum=sum+up;
cha=sum%keng;
if(sum>=h)break;
if(down<cha)
sum=sum-down;
else
sum=sum-cha;
}
printf("%d\n",t);
}
}
}
return 0;
}
//未简化:
#include<stdio.h>
#define min(x,y)(x<y?x:y)
int main(){
int n,h=0,up=0,down=0,keng=0,t,sum,cha=0;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d%d%d%d",&h,&up,&down,&keng);
if(up<min(h,min(down,keng))){
printf("fail\n");
}
else{
sum=0;
t=0;
while(sum<h){
t++;
sum=sum+up;
cha=sum%keng;
if(sum>=h)break;
if(down<cha)
sum=sum-down;
else
sum=sum-cha;
}
printf("%d\n",t);
}
}
}
return 0;
}
题目描述
顾名思义,写一个可以判断一个整数是否为质数的程序。
输入
多组数据,第一行一个数T,表示有T组数据。(1<T<1000)
接下来T行,每行一个数x,表示一组数据。(1<=x<=1000000000)
输出
若为质数则输出Yes,否则输出No,每组数据输出一行。
输入样例
3
1
9
13
输出样例
No
No
Yes
#include<stdio.h>
int main(){
int n=0,a,num=0;
while(~scanf("%d",&n)){
for(int i=0;i<n;i++){
scanf("%d",&num);
a=0;
for(int j=2;j<num;j++){//j>1故输入1,并不会执行循环
if(num%j==0){
a++;break;
}
}
if(a==0){
printf("Yes\n");
}
else{
printf("No\n");
}
}
}
return 0;
}
题目描述
jhljx是一个特别喜欢旅行的人。。一天他做梦梦到自己去太空旅行了。。o(≧v≦)o~~好棒吖。。
jhljx从地球出发,坐着宇宙飞船飞到各种神奇的星球去。。
他去过好多星球,比如说神马火星吖,金星吖,这些都随随便便。
他还去了一趟KMT184.05行星,见到了《来自星星的你》中的都教授。。
jhljx旅行归来,感慨万千啊。。
但他一直不知道自己最远到达了那个星球。
所以他想算一算。但他算数拙计啊。。
那么问题来了。。。
假设地球的坐标是x0,y0,z0,jhljx总共访问了n个星球,n个星球的坐标为x,y,z。
每次访问他都从地球出发,然后访问一个星球,再返回地球。
接着再从地球出发,去访问下一个星球,再返回地球。。。。
在飞行过程中,飞船每飞行1光年需要耗油k升。
请问在这n次飞行中,飞船耗油最多的一次是哪一次,这次飞行消耗了多少油。 (假设飞船都能够到达星球,不考虑没油的情况)。
输入
输入多组数据。
每组数据共(n+3)行。第一行为地球的坐标x0,y0,z0。(x0,y0,z0均为整数,且-1000<=x0,y0,z0<=1000)
第二行为访问的星球个数n。(1<=n<=100)
下面从第三行到第(n+2)行为jhljx要访问的星球的坐标x,y,z。(x,y,z均为整数,且-1000<=x0,y0,z0<=1000)
第(n+3)行为飞船每飞行1光年消耗的油量k。(k为整数,且1<=k<=100)
输出
输出飞船在这n次旅行中,耗油最多的一次飞行和这次飞行消耗的油量,两个数之间用空格隔开,油量的结果保留6位小数。
如果有多次飞行都满足耗油量最大,请输出序号最少的那一次。
输入样例
0 0 0
1
1 1 1
1
输出样例
1 3.464102
#include<stdio.h>
#include<math.h>
int main(){
int x0=0,y0=0,z0=0,x=0,y=0,z=0,n=0,k=0;
while(scanf("%d%d%d%d",&x0,&y0,&z0,&n)!=EOF){
double s[n+1];
int m=0;
s[m]=0;
for(int i=1;i<=n;i++){
scanf("%d%d%d",&x,&y,&z);
s[i]=sqrt((x-x0)*(x-x0)+(y-y0)*(y-y0)+(z-z0)*(z-z0));
if(s[i]>s[m])
m=i;
}
scanf("%d",&k);
printf("%d %.6f\n",m,s[m]*k*2);
}
return 0;
}