杭电oj--简单操作

2000-ASCII码排序

杭电oj--简单操作_第1张图片

#include
using namespace std;
int main(){
    char a,b,c;
	while(scanf("%c %c %c",&a,&b,&c)!=EOF){
		getchar();
		if(a<b){
			if(a>c)  printf("%c %c %c\n",c,a,b);
			else if(b<c) printf("%c %c %c\n",a,b,c);
			else printf("%c %c %c\n",a,c,b);
		}
		else{//b
			if(c<b) printf("%c %c %c\n",c,b,a);
			else if(a<c) printf("%c %c %c\n",b,a,c);
			else printf("%c %c %c\n",b,c,a);
		}
	
	}
	return 0;
} 

第一次没加getchar,这什么玩意??
杭电oj--简单操作_第2张图片
第一次没有加getchar()函数,结果不正确,运行时,第一次输入三个字符排序正确,可是后面再输入时输出就会错误。从键盘输入的字符,会存放到缓冲区中,包括回车符。如输入“abc回车”之后,缓冲区中存了有四个字符’a’、‘b’、‘c’、’\n’,如果上面程序中没有getchar(),则第一次从缓冲区中提取了三个字符之后,还剩下了一个’\n’,则下次再输入三个字符时,缓冲区中会把上次剩下的回车符也算进去,这样处理起来就会有问题。所以另一种做法是在scanf的时候就输入4个
scanf("%c %c %c %c",&a,&b,&c,&d); 用d来接收回车符getchar()是从缓冲区中读取一个字符,如果只是去除缓冲区中的字符,不需要用赋值表达式,直接使用getchar();就行。

2001-计算两点间的距离

杭电oj--简单操作_第3张图片

#include
#include
using namespace std;
int main(){
	double x1,y1,x2,y2;
	while(scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)!=EOF){
		printf("%.2f\n",sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
	}
	
	return 0;
} 

这题没啥坑,不过我把lf写成f之后就全部都是0.00,而且平方不能写成(x1-x2)^2 可以用power函数power((x1-x2),2)

2002-计算球体积

杭电oj--简单操作_第4张图片

#include
#include
using namespace std;
int main(){
	double r;
	while(scanf("%lf",&r)!=EOF){
		printf("%.3lf\n",4*3.1415927*r*r*r/3);
	}
		
	return 0;
} 

这题也没有任何的难度,但是为什么3.1415926就wa???惊了我,而且记得除以三要放在最后,不然前面的4/3就会直接1

2003-求绝对值

杭电oj--简单操作_第5张图片

#include
#include
using namespace std;
int main(){
	double r;
	while(scanf("%lf",&r)!=EOF){
		if(r>0)
		printf("%.2lf\n",r);
		else
		printf("%.2lf\n",-r);
	}
		
	return 0;
} 

2004-成绩转换杭电oj--简单操作_第6张图片

#include
#include
using namespace std;
int main(){
	int a;
	while(scanf("%d",&a)!=EOF){
		if(a>100||a<0)
		printf("Score is error!\n");
		else if(a>=90&&a<=100) printf("A\n");
		else if(a>=80&&a<=89) printf("B\n");
		else if(a>=70&&a<=79) printf("C\n");
		else if(a>=60&&a<=69) printf("D\n");
		else if(a>=0&&a<=59) printf("E\n");

	}
		
	return 0;
} 

2006-奇数乘积杭电oj--简单操作_第7张图片

#include
using namespace std;
int main(){
	int n,a;
	int sum=1;
	while(scanf("%d",&n)!=EOF){
		while(n--){
			scanf("%d",&a);
			if(a%2!=0){
				sum*=a;
			}
		}
		printf("%d\n",sum);
		sum=1;
	}
	return 0;
} 

2007-连续偶数的平方和、连续奇数的立方和

杭电oj--简单操作_第8张图片

#include
using namespace std;
int main(){
	int m,n,i,temp;
	int odd=0,even=0;
	while(scanf("%d %d",&m,&n)!=EOF){
		if(m>n){
			temp=m;
			m=n;
			n=temp;
			
		}
		for(i=m;i<=n;i++){
			if (i%2==0) even+=i*i;
			else odd+=i*i*i;
		}
		printf("%d %d\n",even,odd);
		odd=0;
		even=0;
	}
	return 0;
} 

这题也没什么难度,就是注意如果m>n时要先交换,题目并没有说第一个数一定小于第二个数

2008-数值统计

杭电oj--简单操作_第9张图片

#include
using namespace std;
int main(){
	int n;
	int neg=0,pos=0,zero=0;
	double a;
	scanf("%d",&n); 
	while(n!=0){
		while(n--){
			scanf("%lf",&a);
			if(a>0)  	pos++;
			else if(a==0) zero++;
			else neg++;	
		}
		printf("%d %d %d\n",neg,zero,pos);
		neg=0;
		pos=0;
		zero=0;
		scanf("%d",&n); 
	}
	return 0;
} 

这题注意a为double,第一次用int 报错了Time Limit Exceeded(为什么??)

2009-求数列的和

杭电oj--简单操作_第10张图片

#include
#include
using namespace std;
int main(){
	double n,m;
	double sum=0;
	while(scanf("%lf %lf",&n,&m)!=EOF){
		sum=n;
		while(--m){
		    sum+=sqrt(n);
		    n=sqrt(n);
			}
		
		printf("%.2lf\n",sum);
		sum=0;
	}
	return 0;
} 

2010-水仙花数杭电oj--简单操作_第11张图片

#include
using namespace std;
int narcissus(int);
int main(){
	int n,m,i,a[1000];
	int num=0,k=0;
	while(scanf("%d %d",&n,&m)!=EOF){
		for (i=n;i<=m;i++){
		if(narcissus(i)){//是 
			num++;
			a[k++]=i; 
		  }
		}
		if(num==0)
		printf("no\n");
		else{
			
		   for(int j=0;j<k-1;j++){
			printf("%d ",a[j]);
			}
			printf("%d\n",a[k-1]); //最后一个换行 
		}
		num=0;
		k=0;
		
	}
	return 0;
} 
int narcissus(int i){
	int bai,shi,ge;
	bai=i/100;
	shi=(i-bai*100 )/10;
	ge=i%10;
	//printf("%d %d %d",bai,shi,ge);
	if(bai*bai*bai+shi*shi*shi+ge*ge*ge==i) return 1;
	else return 0;
	
}

注意结果的展示形式,一行最后一个没有空格,直接换行。

2011-多项式求和

杭电oj--简单操作_第12张图片

#include
using namespace std;
int main(){
	double m,n,a[102],sum=0;
	
	scanf("%lf",&m);
	while(m--){
		scanf("%lf",&n);
		for(int i=1;i<=n;i++){
			if(i%2==0) sum-=1/(double)(i);
			else sum+=1/(double)(i);	
		}
		printf("%.2lf\n",sum);
		sum=0;
	}
	return 0;
	
} 

这题主要是强制类型转换,还有注意lf,因为这个改了很久浪费了很多时间,小细节要更注意。

2039三角形

杭电oj--简单操作_第13张图片

#include
using namespace std;
int main(){
	int n;
	double a,b,c;
	scanf("%d",&n);
	while(n--){
		scanf("%lf %lf %lf",&a,&b,&c);
	    if(a<b){
	    	if(c>b){ //c最大 
	    		if(a+b<=c) printf("NO\n");
				else  printf("YES\n");
			}
			else{//b最大 
			    if(a+c<=b) printf("NO\n");
				else  printf("YES\n");
				
			}
		}
		else{ //b
		    if(c>a){ //c最大 
	    		if(a+b<=c) printf("NO\n");
				else  printf("YES\n");
			}
			else{//a最大 
			    if(b+c<=a) printf("NO\n");
				else  printf("YES\n");
				
			}	
		}
		}
	return 0;
} 

只要判断三条边中最大的那条就行

你可能感兴趣的:(杭电oj--简单操作)