PAT乙级1054-----求平均值 (20分)
1054 求平均值 (20分)
本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。
输入格式:
输入第一行给出正整数 N(≤)。随后一行给出 N 个实数,数字间以一个空格分隔。
输出格式:
对每个非法输入,在一行中输出 ERROR: X is not a legal number
,其中 X
是输入。最后在一行中输出结果:The average of K numbers is Y
,其中 K
是合法输入的个数,Y
是它们的平均值,精确到小数点后 2 位。如果平均值无法计算,则用 Undefined
替换 Y
。如果 K
为 1,则输出 The average of 1 number is Y
。
输入样例 1:
7
5 -3.2 aaa 9999 2.3.4 7.123 2.35
输出样例 1:
ERROR: aaa is not a legal number
ERROR: 9999 is not a legal number
ERROR: 2.3.4 is not a legal number
ERROR: 7.123 is not a legal number
The average of 3 numbers is 1.38
输入样例 2:
2
aaa -9999
输出样例 2:
ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined
思路:
1.第一个字符要么是数字要么是负号
2.不能有字母(即字符范围是'0'----'9'以及'.'和'-')
3.小数点不能有两个,且小数点可以在首位也可以在末尾
4.小数点后最多2位数字
5.数字范围是[-1000,1000]
特别要注意:
测试点2的 1 number 不要写成 1 numbers 不能有s 巨坑
首次通过代码:
1 #include<stdio.h> 2 #include<string.h> 3 4 int main(){ 5 int sum; 6 char a[1000]; 7 // int dot=0; 8 // int p_num=1; 9 // int dec=0;//小数点 10 // int after_dot=0;//小数点后有几位 11 float answer=0; 12 int num_sum=0; 13 scanf("%d",&sum); 14 for(int i=0;i<sum;i++){ 15 scanf("%s",a); 16 int b=10;//小数点后几位权重 17 float num=0;//当前的数字 18 int flag=1;//1表示是数字,0表示非法 19 int p_num=1;//1表示正数,0表示负数 20 int dec=0;//是否有小数点 21 int after_dot=0;//小数点后有几位 22 for(int j=0;j<strlen(a);j++){ 23 if(a[j]=='-'&&j==0) p_num=0; 24 else if(a[j]=='.'){ 25 if(dec==1) { 26 printf("ERROR: %s is not a legal number\n",a); 27 flag=0; 28 break; 29 } 30 dec=1; 31 } 32 else if(a[j]>='0'&&a[j]<='9') { 33 //若在小数点前 34 if(!dec){ 35 num=num*10+a[j]-'0'; 36 } 37 else { 38 after_dot++; 39 //小数点后数字大于2个 40 if(after_dot>2) { 41 printf("ERROR: %s is not a legal number\n",a); 42 flag=0; 43 break; 44 } 45 num=num+(float)(a[j]-'0')/b; 46 b*=10; 47 } 48 //数字大于1000 49 if(num>1000){ 50 printf("ERROR: %s is not a legal number\n",a); 51 flag=0; 52 break; 53 } 54 } 55 else { 56 printf("ERROR: %s is not a legal number\n",a); 57 flag=0; 58 break; 59 } 60 } 61 if(flag){ 62 if(p_num) { 63 answer+=num; 64 } 65 else { 66 answer-=num; 67 } 68 num_sum++; 69 } 70 71 } 72 73 if(num_sum==0){ 74 printf("The average of 0 numbers is Undefined"); 75 } 76 else if(num_sum>1){ 77 printf("The average of %d numbers is %.2f",num_sum,answer/num_sum); 78 } 79 else { 80 printf("The average of 1 number is %.2f",answer/num_sum); 81 } 82 return 0; 83 }
参考:
FROM:https://blog.csdn.net/qq_38263123/article/details/82056788