杭电ACM.docx
- 文档编号:14729999
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:29
- 大小:20.64KB
杭电ACM.docx
《杭电ACM.docx》由会员分享,可在线阅读,更多相关《杭电ACM.docx(29页珍藏版)》请在冰点文库上搜索。
杭电ACM
1.
ProblemDescription
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
Input
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
Output
对于每组输入数据,输出一行,字符中间用一个空格分开。
SampleInputqweasdzxc
SampleOutputeqwadscxz
方案:
#include
{
charstr[4],t;
while(scanf("%s",&str)!
=EOF){
for(inti=0;i<2;i++)
{
if(str[i]>str[i+1])
{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
if(str[0]>str[2])
{
t=str[0];
str[0]=str[2];
str[2]=t;
}printf("%c%c%c\n",str[0],str[1],str[2]);
}
}
2.
ProblemDescription
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
Input
x1,y1,x2,y2,数据之间用空格隔
输入数据有多组,每组占一行,由4个实数组成,分别表示开。
Output对于每组输入数据,输出一行,结果保留两位小数。
SampleInput
0001
0110
SampleOutput
1.00
1.41
答案:
#include
#include
voidmain()
{
doublea,b,c,d;
doublee;
while(scanf("%lf%lf%lf%lf",&a,&b,&c,&d)!
=EOF)
{
e=sqrt((d-b)*(d-b)+(c-a)*(c-a));printf("%.2lf\n",e);
}
}
3.
ProblemDescription根据输入的半径值,计算球的体积。
Input
输入数据有多组,每组占一行,每行包括一个实数,表示球的半径。
Output
输出对应的球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。
SampleInput
1
1.5
SampleOutput
4.189
14.137
Hint
#definePI3.1415927
答案:
#include
#definePI3.1415927voidmain()
{
doublei;
doublej;while(scanf("%lf",&i)!
=EOF){
j=(4.0/3.0)*PI*i*i*i;
printf("%.3lf\n",j);
}
4.
ProblemDescription求实数的绝对值。
Input
输入数据有多组,每组占一行,每行包含一个实数。
Output
对于每组输入数据,输出它的绝对值,要求每组数据输出一行,结果保留两位小数。
SampleInput
123
-234.00
SampleOutput
123.00
234.00
答案:
#include
#include
voidmain()
{
doublei,j;
while(scanf("%lf",&i)!
=EOF)
{
j=sqrt(i*i);
printf("%.2lf\n",j);
}
}
5.
ProblemDescription
输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;
Input输入数据有多组,每组占一行,由一个整数组成。
Output
Scoreis
对于每组输入数据,输出一行。
如果输入数据不在0~100范围内,请输出一行:
error!
”。
SampleInput
56
67
100
123
SampleOutput
E
D
A
Scoreiserror!
答案:
#include
inti;
while(scanf("%d",&i)!
=EOF)
{
chargrade;
if(i>0&&i<60)grade='E';
elseif(i>=60&&i<70)
grade='D';
elseif(i>=70&&i<80)grade='C';
elseif(i>=80&&i<90)
grade='B';
elseif(i>=90&&i<=100)
grade='A';
else
grade='F';
switch(grade)
{
case'E':
printf("E\n");break;
case'D':
printf("D\n");break;
case'C':
printf("C\n");break;
case'B':
printf("B\n");break;
case'A':
printf("A\n");break;default:
printf("Scoreiserror!
\n");}
}
}
6.
ProblemDescription
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sampleinput另外,可以向你确保所有的输入数据是合法的。
Output对于每组输入数据,输出一行,表示该日期是该年的第几天。
SampleInput
1985/1/20
2006/3/12
SampleOutput
20
71
答案:
#include
voidmain()
{
inta,b,c;
while(scanf("%d/%d/%d",&a,&b,&c)!
=EOF)
{
intdata1,data2,data3,data;
if((a%4!
=0)||(a%400!
=0)&&(a%100==0)){
if(b>2&&b<=12)
{
if(b<5)
{data1=31*(b/2);data2=0;data3=28;data=data1+data2+data3+c;printf("%d\n",data);
}elseif(b<7){data1=31*(b/2);data2=30;data3=28;data=data1+data2+data3+c;printf("%d\n",data);
}
elseif(b<10)
{data1=31*(b/2);data2=30*2;data3=28;data=data1+data2+data3+c;printf("%d\n",data);
}
elseif(b<12)
{data1=31*(b/2);data2=30*3;data3=28;data=data1+data2+data3+c;printf("%d\n",data);
}
else
{
data1=31*(b/2);
data2=30*4;
data3=28;
data=data1+data2+data3+c;
printf("%d\n",data);
}
}
elseif(b>0&&b<=2)
{
if(b==1)
{
data=c;
printf("%d\n",data);
}
else
{
data=31+c;
printf("%d\n",data);
}
}
}
elseif((a%400==0)||(a%4==0)&&(a%100!
=0))
{
if(b>2&&b<=12)
{
if(b<5)
{
data1=31*(b/2);
data2=0;
data3=29;
data=data1+data2+data3+c;
printf("%d\n",data);
}
elseif(b<7)
{
data1=31*(b/2);
data2=30;
data3=29;
data=data1+data2+data3+c;
printf("%d\n",data);
elseif(b<10)
{data1=31*(b/2);data2=30*2;data3=29;data=data1+data2+data3+c;printf("%d\n",data);
}
elseif(b<12)
{data1=31*(b/2);data2=30*3;data3=29;data=data1+data2+data3+c;printf("%d\n",data);
}
else
{data1=31*(b/2);data2=30*4;data3=29;
data=data1+data2+data3+c;printf("%d\n",data);
}
}
elseif(b>0&&b<=2)
{
if(b==1)
{
data=c;
printf("%d\n",data);
}
else
{
data=31+c;
printf("%d\n",data);
}
}
7.
ProblemDescription
给你n个整数,求他们中所有奇数的乘积。
n,表示本组数据
Input输入数据包含多个测试实例,每个测试实例占一行,每行的第一个数为共有n个,接着是n个整数,你可以假设每组数据必定至少存在一个奇数。
Output输出每组数中的所有奇数的乘积,对于测试实例,输出一行。
SampleInput
3123
42345
SampleOutput
3
15
答案:
#include
intmain()
{
intn,t,result;
while(scanf("%d",&n)!
=EOF)
{
inti;result=1;
for(i=0;i } printf("%d\n",result); } return0; } 8. ProblemDescription 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。 Input 输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成。 Output 对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶 数的平方和以及所有奇数的立方和。 你可以认为32位整数足以保存结果。 SampleInput 13 25 SampleOutput 428 20152 答案: #include { longa,b,m,n; while(scanf("%d%d",&a,&b)! =EOF){ m=0; n=0; if(a>b) { longt;t=a; a=b;b=t; } for(a;a<=b;a++) {if(a%2==0){ m+=a*a;}else{ n+=a*a*a;} } printf("%d%d\n",m,n); } } 9. ProblemDescription 统计给定的n个数中,负数、零和正数的个数。 Input 输入数据有多组,每组占一行,每行的第一个数是整数n(n<100),表示需要统计的数值的 个数,然后是n个实数;如果n=0,则表示输入结束,该行不做处理。 Output 对于每组输入数据,输出一行a,b和c,分别表示给定的数据中负数、零和正数的个数。 SampleInput 60123-10 512340.5 SampleOutput 123 005 答案“: #include intmain() { intn,a,b,c,i; doublem; while(scanf("%d",&n)! =EOF) { a=b=c=0; if(n! =0) { for(i=0;i { scanf("%lf",&m);if(m<0)a++; elseif(m==0)b++; elseif(m>0)c++; } } else break; printf("%d%d%d\n",a,b,c); } } 10. ProblemDescription数列的定义如下: m项的和。 数列的第一项为n以后各项为前一项的平方根,求数列的前 Input 输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含 义如前所述。 Output 2位小数。 对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留 SampleInput 814 22 SampleOutput 94.73 3.41 答案: #include #include { doublen; intm; while(scanf("%lf",&n)! =EOF){ inti; doublea=n,j=0; scanf("%d",&m); for(i=1;i { j=sqrt(n);a+=j;n=j; } printf("%.2lf\n",a); }return0; 11. ProblemDescription 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如: 153=1人3+5人3+3人3。 现在要求输出所有在m和n范围内的水仙花数。 Input输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。 Output 对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开; 如果给定的范围内不存在水仙花数,则输出no;每个测试实例的输出占一行。 SampleInput 100120 300380 SampleOutput no 370371 答案: #include intmain() { intm,n,a,b,c,d; while(scanf("%d%d",&m,&n)! =EOF){ d=0;//每次输入要初始化个数。 while(m<=n) {a=m%10;b=(m%100)/10;c=m/100; if(a*a*a+b*b*b+c*c*c==m){ if(d==0)printf("%d",m); else printf("%d",m);d++; } m++; } if(d==0)printf("no\n"); elseprintf("\n"); } return0; } 12. ProblemDescription多项式的描述如下: 1-1/2+1/3-1/4+1/5-1/6+...现在请你求出该多项式的前n项的和。 Input m(m<100),表示测试实例的个数,第二行包含 输入数据由2行组成,首先是一个正整数 m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和。 Output 对于每个测试实例n,要求输出多项式前n项的和。 每个测试实例的输出占一行,结果保留 2位小数。 SampleInput 2 12 SampleOutput 1.00 0.50 答案: #include intmain() { intn,m,i; doublea[1000],j; a[1]=1; for(i=2;i<1000;i++) { j=1.0/i; if(i%2! =1)a[i]=a[i-1]-j; elsea[i]=a[i-1]+j; } while(scanf("%d",&n)! =EOF) { while(n--) { scanf("%d",&m);printf("%.2f\n",a[m]); } } return0; } 13. ProblemDescription 对于表达式nA2+n+41,当门在(x,y)范围内取整数值时(包括x,y)(-39<=x Input输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该 行不做处理。 Output "OK",否则请输出“Sorry”, 对于每个给定范围内的取值,如果表达式的值都为素数,则输出每组输出占一行。 SampleInput 01 00 SampleOutput OK 答案: #include intmain(void) { intx,y,i,j,k,sum,t; while(scanf("%d%d",&x,&y)! =EOF) { sum=0; if(x==0&&y==0) break; else { for(i=x;i<=y;i++) { t=i*i+i+41; k=1; for(j=2;j*j<=t;j++){ if(t%j==0) { k=0; break; } } if(k) sum++; } if(sum==y-x+1) printf("OK\n"); else printf("Sorry\n"); } } return0; 14. ProblemDescription 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知: 悟空是在研究一个数学问题! 什么问题? 他研究的问题是蟠桃一共有多少个! 不过,到最后,他还是没能解决这个难题,呵呵A-A 当时的情况是这样的: 第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。 聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢? Input 输入数据有多组,每组占一行,包含一个正整数n(1 是在第n天发生的。 Output对于每组输入数据,输出第一天开始吃的时候桃子的总数,每个测试实例占一行。 SampleInput 2 4 SampleOutput 422 答案: #include #include { intn; while(scanf("%d",&n)! =EOF)printf("%.0f\n",3*pow(2,n-1)-2); return0; 15. ProblemDescription 青年歌手大奖赛中,评委会给参赛选手打分。 选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。 Input 输入数据有多组,每组占一行,每行的第一个数是n(2 n个评委的打分。 Output 2位小数,每组输出占一行。 对于每组输入数据,输出选手的得分,结果保留 SampleInput 3999897 4100999897 SampleOutput 98.00 98.50 答案: #include intmain() { intn,i,a,b; intstr[100]; floatsum; while(scanf("%d",&n)! =EOF) { sum=0;for(i=0;i scanf("%d",&str[i]);sum+=str[i]; } for(a=0;a if(str[b]>str[b+1]) {intt;t=str[b];str[b]=str[b+1];str[b+1]=t; } } printf("%.2f\n",(sum-str[0]-str[n-1])*1.0/(n-2));}return0; } 16. ProblemDescription 有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。 编程输出该平均值序列。 Input n和m,n和m的含义如上所述。 输入数据有多组,每组占一行,包含两个正整数 Output 对于每组输入数据,输出一个平均值序列,每组输出占一行。 SampleInput 32 42 SampleOutput 36 37 答案: #include intmain(void) { inti,n,m,b; while(scanf("%d%d",&n,&m)! =EOF) { b=2; for(i=0;i { printf("%d",b+m-1); b+=m*2; } printf(n%m? "%d\n": "\n",b+n%m-1); } return0; } 17. ProblemDescription 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。 Input 输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。 n=0表示输入的结束,不做处理。 Output 对于每组输入数据,输出交换后的数列,每组输出占一行。 SampleInput 42134 554321 0 SampleOutput 1234 14325 答案: #include intmain() { inti,n,index,t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACM