2000-ASCII码排序
#include<iostream>
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<a
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,这什么玩意??
第一次没有加getchar()函数,结果不正确,运行时,第一次输入三个字符排序正确,可是后面再输入时输出就会错误。从键盘输入的字符,会存放到缓冲区中,包括回车符。如输入“abc回车”之后,缓冲区中存了有四个字符’a’、‘b’、‘c’、’\n’,如果上面程序中没有getchar(),则第一次从缓冲区中提取了三个字符之后,还剩下了一个’\n’,则下次再输入三个字符时,缓冲区中会把上次剩下的回车符也算进去,这样处理起来就会有问题。所以另一种做法是在scanf的时候就输入4个
scanf(“%c %c %c %c”,&a,&b,&c,&d);
用d来接收回车符getchar()是从缓冲区中读取一个字符,如果只是去除缓冲区中的字符,不需要用赋值表达式,直接使用getchar();就行。
2001-计算两点间的距离
#include<iostream>
#include<cmath>
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-计算球体积
#include<iostream>
#include<cmath>
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-求绝对值
#include<iostream>
#include<cmath>
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-成绩转换
#include<iostream>
#include<cmath>
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-奇数乘积
#include<iostream>
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-连续偶数的平方和、连续奇数的立方和
#include<iostream>
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-数值统计
#include<iostream>
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-求数列的和
#include<iostream>
#include<cmath>
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-水仙花数
#include<iostream>
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-多项式求和
#include<iostream>
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三角形
#include<iostream>
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<a
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;
}
只要判断三条边中最大的那条就行