1054. 求平均值 (20)
2017-02-10 21:23
351 查看
本题的基本要求非常简单:给定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:
输出样例1:
输入样例2:
输出样例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
#include <stdio.h> #include <ctype.h> #include <string.h> #define TRUE 1 #define FALSE 0 int check(char *a,double *sum); int main() { int i,n; int num = 0; double sum = 0,ave = 0; char test[100]; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%s",test); if(check(test,&sum)==TRUE) num++; else{ printf("ERROR: %s is not a legal number\n",test); } } ave = sum/num; if(num==0) printf("The average of 0 numbers is Undefined"); else if(num==1) printf("The average of 1 number is %.2lf",ave); else printf("The average of %d numbers is %.2lf",num,ave); return 0; } /***************/ int check(char *a,double *sum) { int i = 0,j; int len,flag = 0,num = 0; double digit = 0,dec = 0,div = 1; len = strlen(a); if(a[0]=='-') { i++; flag = 1; } for(;i<len;i++) { if(isdigit(a[i])==0 && a[i]!='.')//字符不是数字或者'.'均错误 return FALSE; if(a[i]=='.') num++; if(num>1) return FALSE;//超过2个'.'也错误 } if(num==0) { if(flag==0) { for(i=0;i<len;i++) { digit = digit*10+(double)(a[i]-'0'); } } if(flag==1) { for(i=1;i<len;i++) { digit = digit*10+(double)(a[i]-'0'); } digit = 0-digit; } } if(num==1) { if(flag==0) { for(i=0;a[i]!='.';i++) { digit = digit*10+(double)(a[i]-'0'); } j=i+1; if(len-j>2) return FALSE;//小数超过2位错误 for(;j<len;j++) { dec = dec*10+(double)(a[j]-'0'); div = 10*div; } dec /= div; digit += dec; } if(flag==1) { for(i=1;a[i]!='.';i++) { digit = digit*10+(double)(a[i]-'0'); } j=i+1; if(len-j>2) return FALSE; for(;j<len;j++) { dec = dec*10+(double)(a[j]-'0'); div = 10*div; } dec /= div; digit += dec; digit = 0-digit; } } if(digit<-1000||digit>1000) return FALSE; *sum += digit; return TRUE; }
相关文章推荐
- 13.6.2
- CSU-1410
- 关于一些东西
- SettingBar - Android自定义控件
- CSU-1409
- Unsupported major.minor version 51.0
- NSIS安装包制做软件的常用小技巧
- vuejs自定义过滤器根据搜索框输入的值,筛选复杂的列表数据
- How to fix homebrew permissions?
- 1053. 住房空置率 (20)
- 排序3:插入排序(普通插入排序 + 折半插入排序 + 链表插入排序 + 希尔排序)
- poj专题 - 初期数学
- Python程序员的10个常见错误
- M--二分查找(递归)
- JZOJ 3506. 【NOIP2013模拟11.4A组】善良的精灵
- RxJava学习总结4
- tensorflow极速入门
- CSU-1408
- CountDownLatch的使用
- jQuery学习