曹!这题真恶心,把形如“123.”,小数点在最后一位的数也算作合法数了,题目并没有明确说明。害的我写了两端代码,都没A过…最后看了人家的代码才发现,吐了!!!!!!!!!!!!
代码一:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main(){
int n,k=0;
double sum=0,t;
cin>>n;
char a[100];
for(int i=0;i<n;i++){
int tag=1,dot=0,legal=1;
scanf("%s",a);
for(int j=0;j<strlen(a);j++){
if(a[j]=='-')
tag=0;
else if(a[j]=='.'){
dot++;
if(strlen(a)-1-j>2)
legal=0;
if(j==0)
legal=0;
}
else if(a[j]<'0'||a[j]>'9')
legal=0;
}
if(dot>1)
legal=0;
t=atof(a);
if(t>1000||t<-1000)
legal=0;
if(legal){
sum+=t;
k++;
}
else
printf("ERROR: %s is not a legal number\n",a);
memset(a,0,sizeof(a));
}
if(k>1)
printf("The average of %d numbers is %.2f\n",k,sum/k);
else if(k==1)
printf("The average of 1 number is %.2f\n",sum/k);
else
printf("The average of 0 numbers is Undefined\n");
return 0;
}
代码二:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
bool legal(char *a){
int dot=0,havenum=0;
double t;
for(int i=0;i<strlen(a);i++){
if((a[i]<'0'||a[i]>'9')&&a[i]!='-'&&a[i]!='.')
return 0;
else{
if(a[i]=='-'&&i!=0)
return 0;
if(a[i]=='.'){
if(i==0)
return 0;
dot++;
if(dot>1)
return 0;
if(strlen(a)-1-i>2)
return 0;
}
else if(a[i]>='0'&&a[i]<='9')
havenum=1;
}
}
if(!havenum)
return 0;
t=atof(a);
if(t>1000||t<-1000)
return 0;
return 1;
}
int main(){
int n,k=0;
double sum=0;
cin>>n;
char a[100];
for(int i=0;i<n;i++){
scanf("%s",a);
if(legal(a)){
sum+=atof(a);
k++;
}
else
printf("ERROR: %s is not a legal number\n",a);
memset(a,0,sizeof(a));
}
if(k>1)
printf("The average of %d numbers is %.2f\n",k,sum/k);
else if(k==1)
printf("The average of 1 number is %.2f\n",sum);
else
printf("The average of 0 numbers is Undefined\n");
return 0;
}