日常刷题

杭电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三条边的类型定义
加油吧兄弟们!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值