杭电oj刷题题解2000-2011,2039
2000题解
#include <stdio.h>
int main() {
char a,b,c;
while(~scanf("%c %c %c",&a,&b,&c)) {
getchar();
if(a<=b&&a<=c) {
printf("%c ",a);
if(b<=c) {
printf("%c %c",b,c);
} else {
printf("%c %c",c,b);
}
} else if(b<=a&&b<=c) {
printf("%c ",b);
if(a<=c) {
printf("%c %c",a,c);
} else {
printf("%c %c",c,a);
}
} else if(c<=b&&c<=a) {
printf("%c ",c);
if(b<=a) {
printf("%c %c",b,a);
} else {
printf("%c %c",a,b);
}
}
printf("\n");
}
return 0;
}
这道题主要需要注意的就是getchar();一定要注意加上,否则回车也会被当做字符被比较,这道题也是有很多的思路,上面的是其中一种,还有其他的就是排序,把要输入的字符abc两两排好再输出等等
#include <stdio.h>
int main() {
char a,b,c,d;
while(~scanf("%c %c %c",&a,&b,&c)) {
getchar();
if(a>b) {
d=a;
a=b;
b=d;
}
if(a>c) {
d=a;
a=c;
c=d;
}
if(b>c) {
d=b;
b=c;
c=d;
}
printf("%c %c %c\n",a,b,c);
}
}
2001题解
#include <stdio.h>
#include <math.h>
int main() {
double x1,x2,y1,y2;
while(~scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)) {
double len;
len=sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
printf("%.2lf\n",len);
}
return 0;
}
这题就是用到了两点间距离公式,注意开根号函数的引用以及头文件的添加,还有就是保留两位小数的写法为%.2lf,而不是%2lf,%2f是指输出的数据共占2列。如果数值长度小于2,那么就在左端补空格
2002题解
#include <stdio.h>
#define PI 3.1415927
int main() {
double r,v;
while(~scanf("%lf",&r)) {
v=4*PI*r*r*r/3;
printf("%.3lf\n",v);
}
return 0;
}
2003题解
#include <stdio.h>
#include <math.h>
int main() {
double a;
while(~scanf("%lf",&a)) {
printf("%.2lf\n",fabs(a));
}
return 0;
}
这道题可以先判断是否为负数,如果是的话取相反数,否则直接输出。这里使用了绝对值函数fabs();函数,此函数用于浮点数,整数型的话绝对值函数为abs();函数
2004题解
#include <stdio.h>
int main() {
int x;
while(~scanf("%d", &x)) {
if(x<0 || x>100) {
printf("Score is error!\n");
}
if(x>=0 && x<60) {
printf("E\n");
}
if(x>=60 && x<70) {
printf("D\n");
}
if(x>=70 && x<80) {
printf("C\n");
}
if(x>=80 && x<90) {
printf("B\n");
}
if(x>=90 && x<=100) {
printf("A\n");
}
}
}
2005题解
#include <stdio.h>
int main() {
int y,m,d,i,days;
int month[12] = {31,0,31,30,31,30,31,31,30,31,30,31};
while(~scanf("%d/%d/%d",&y,&m,&d)) {
if((y%4==0&&y%100!=0)||(y%400==0)) {
days = 0;
month[1]=29;
for(i=0; i<m-1; i++) {
days+=month[i];
}
days+=d;
printf("%d\n",days);
} else {
days = 0;
month[1] = 28;
for(i=0; i<m-1; i++) {
days+=month[i];
}
days+=d;
printf("%d\n", days);
}
}
return 0;
}
这里需要注意的就是闰年判断还有就是输入格式scanf("%d/%d/%d",&y,&m,&d);表示希望在输入中按照要求格式加入’/’,否则结果会不正确
2006题解
#include <stdio.h>
int main() {
int n,i,a[100],pro;
while(~scanf("%d",&n)) {
pro=1;
for(i=1; i<=n; i++) {
scanf("%d",&a[i]);
if(a[i]%2!=0) {
pro*=a[i];
}
}
printf("%d\n",pro);
}
return 0;
}
2007题解
#include <stdio.h>
int main() {
int x,y,i,qua,cub;
while(~scanf("%d %d",&x,&y)) {
qua=0;
cub=0;
if(x<y) {
for(i=x; i<=y; i++) {
if(i%2!=0) {
qua+=(i*i*i);
} else {
cub+=(i*i);
}
}
} else {
for(i=y; i<=x; i++) {
if(i%2!=0) {
qua+=(i*i*i);
} else {
cub+=(i*i);
}
}
}
printf("%d %d\n",cub,qua);
}
return 0;
}
这里比较需要注意的就是x和y的大小问题
2008题解
#include <stdio.h>
int main() {
int n,x,y,z;
double i;
while(~(scanf("%d",&n))) {
if(n==0) {
continue;
} else {
x=0;
y=0;
z=0;
while(n--) {
scanf("%lf",&i);
if(i<0) {
x+=1;
} else if(i==0) {
y+=1;
} else if(i>0) {
z+=1;
}
}
}
printf("%d %d %d\n",x,y,z);
}
return 0;
}
2009题解
#include <stdio.h>
#include <math.h>
int main() {
double n,sum;
int m;
while(~scanf("%lf %d",&n,&m)) {
sum=0;
while(m--) {
sum+=n;
n=sqrt(n);
}
printf("%.2lf\n",sum);
}
return 0;
}
2010题解
#include <stdio.h>
int main() {
int m,n,a,b,c,i,flag;
while(~scanf("%d %d",&m,&n)) {
flag = 0;
for(i=m; i<=n; i++) {
a=i/100;
b=i%100/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c) {
flag += 1;
if(flag==1) {
printf("%d",i);
} else {
printf(" %d",i);
}
}
}
if(flag==0) {
printf("no");
}
printf("\n");
}
return 0;
}
这个flag设的原因主要是为了标记整段都没有水仙花数,还有就是输出格式问题,要求最后一个数后边不能有空格
2011题解
#include <stdio.h>
#include <math.h>
int main() {
int m;
double n,sum;
scanf("%d",&m);
while(m--) {
sum=0;
scanf("%lf",&n);
for(int i=1; i<=n; i++) {
sum+=pow(-1,i+1)/(double)i;
}
printf("%.2lf\n",sum);
}
return 0;
}
我写的这里用到了pow();函数,这是用来算一个数的次方的函数比如本题内就是-1的i+1次方,还有就是这里我用到了一个强制转换把i从int型转换为了double型,不转换会发生计算错误,如果不用这种方法还可以选择判断数为奇数偶数,然后选择’+=‘和’-='也可以求解,强制转换也同理可以顶一个double数先将i的值付给所定义的进行运算
2039题解
#include <stdio.h>
int main() {
int M;
double A,B,C;
scanf("%d",&M);
while(M--) {
scanf("%lf %lf %lf",&A,&B,&C);
if(A+B>C&&A+C>B&&B+C>A) {
printf("YES\n");
} else {
printf("NO\n");
}
}
return 0;
}
这题比较需要注意的就是A,B,C三条边的类型定义
加油吧兄弟们!