PAT(乙级)1054 求平均值
2021/11/2 6:13:15
本文主要是介绍PAT(乙级)1054 求平均值,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1054 求平均值 (20 分)
本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。
输入格式:
输入第一行给出正整数 N(≤100)。随后一行给出 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.后面结尾带一个负号如,' 111.'是合法的数
2.当合法的数只有一个时要用 ' number ',没有s
3.当只有一个负号 '-' 时是非法的数
4.用sscanf函数和sprintf函数更加方便
详细代码:
#include<stdio.h> #include<string.h> int main() { int N; scanf("%d",&N); char ch[1000]; int i, t, r, dian, fu, b ; int n = 0; int j = 0; double a; double sum = 0; double temp; while( scanf("%s",ch) != EOF ) { j++; //printf("%s\n",ch); r = 1;//是否为合理数 dian = 0;//点的数量 fu = 0;//负号的数量 temp = 0;//合理的数的值 t = strlen(ch);//长度 for( i = 0; i < t; i++) { if( ( ch[i] < '0' || ch[i] > '9' ) && ch[i] != '.' && ch[i] != '-' ) { r = 0; break; } else if( ch[i] == '.' ) { dian++; b = i; if(dian > 1) { r = 0; break; } } else if( ch[i] == '-' ) { fu++; if(fu > 1) { r = 0; break; } } } //只有一个负数的情况 if(fu == t ) { r = 0; } //小数点为2位 if( r == 1 && dian == 1) { if(t - b > 3) { r = 0; } } /*else if(r == 1 && dian == 0 ) { if( t > 4) { r = 0; } } */ if(r == 0) { printf("ERROR: %s is not a legal number\n",ch); } else if( dian == 0) { a = 1; for( i = t-1; i >= 0; i--) { if(ch[i] != '-') { temp += (ch[i] - '0') * a; a *= 10; } } if( fu == 1) { temp *= (-1); } //数据范围 -1000 ~ 1000 if(temp >1000 || temp < -1000) { printf("ERROR: %s is not a legal number\n",ch); continue; } //printf("%lf\n",temp); sum += temp; n++; } else if( dian == 1) { a = 1; for( i = 0; i < ( t-b-1 ); i++) { a /= 10; } for( i = t-1; i >= 0; i--) { if( ch[i] != '.' && ch[i] != '-') { temp += (ch[i] - '0')/1.0 * a; a *= 10; } } if(fu == 1) { temp *= (-1); } //数据范围 -1000 ~ 1000 if(temp > 1000 || temp < -1000) { printf("ERROR: %s is not a legal number\n",ch); continue; } //printf("%lf\n",temp); sum += temp; n++; } } if(n != 0) { sum /= n; } if( n> 1) { printf("The average of %d numbers is %.2lf", n, sum); } else if(n == 1) { printf("The average of %d number is %.2lf", n, sum); } else { printf("The average of 0 numbers is Undefined"); } return 0; }
这篇关于PAT(乙级)1054 求平均值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26手写消息中间件:从零开始的指南
- 2024-11-26Java语音识别项目资料:新手入门教程
- 2024-11-26JAVA语音识别项目资料:新手入门教程
- 2024-11-26Java语音识别项目资料:入门与实践指南
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料入门教程
- 2024-11-26Java云原生资料:新手入门教程
- 2024-11-25Java创意资料:新手入门的创意学习指南
- 2024-11-25JAVA对接阿里云智能语音服务资料详解:新手入门指南
- 2024-11-25Java对接阿里云智能语音服务资料详解