PAT(A) 101-133-1-2016-03-12 A. Finding Average (20)
来源:互联网 发布:拍摄淘宝照片背景图片 编辑:程序博客网 时间:2024/06/06 02:28
A. Finding Average (20)
The basic task is simple: given N real numbers, you are supposed to calculate their average. But what makes it complicated is that some of the input numbers might not be legal. A "legal" input is a real number in [-1000, 1000] and is accurate up to no more than 2 decimal places. When you calculate the average, those illegal numbers must not be counted in.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (<=100). Then N numbers are given in the next line, separated by one space.
Output Specification:
For each illegal input number, print in a line "ERROR: X is not a legal number" where X is the input. Then finally print in a line the result: "The average of K numbers is Y" where K is the number of legal inputs and Y is their average, accurate to 2 decimal places. In case the average cannot be calculated, output "Undefined" instead of Y. In case K is only 1, output "The average of 1 number is Y" instead.
Sample Input 1:75 -3.2 aaa 9999 2.3.4 7.123 2.35Sample Output 1:
ERROR: aaa is not a legal numberERROR: 9999 is not a legal numberERROR: 2.3.4 is not a legal numberERROR: 7.123 is not a legal numberThe average of 3 numbers is 1.38Sample Input 2:
2aaa -9999Sample Output 2:
ERROR: aaa is not a legal numberERROR: -9999 is not a legal numberThe average of 0 numbers is Undefined
#include <iostream>#include <string>using namespace std;float isLegal(string s){int len = s.length();float result = 0.0, resultLast = 0.0;int flag = 1;string::iterator ite = s.begin();if (*ite == '-'){++ite;flag = -1;}while (ite == s.end() || *ite != '.'){if (ite == s.end())return flag * result;if (*ite >= '0' && *ite <= '9'){float num = *ite - '0';result = result * 10 + num;if (result > 1000)return 0.0;}elsereturn 0.0;++ite;}++ite;int weishu = 0;while (1){if (ite == s.end())return flag * (result + resultLast / pow(10, weishu));if (*ite >= '0' && *ite <= '9'){float num = *ite - '0';resultLast = resultLast * 10 + num;++weishu;if (resultLast > 99)return 0.0;}elsereturn 0.0;++ite;}return flag * (result + resultLast / pow(10, weishu));}int main(){int N, amount = 0;cin >> N;string *p = new string[N];float sum = 0.0, temp;for (int i = 0; i < N; ++i){cin >> p[i];temp = isLegal(p[i]);if (fabs(temp) > 0.001){sum += temp;++amount;}else{cout << "ERROR: " << p[i] << " is not a legal number" << endl;}}cout << "The average of " << amount << " numbers is ";if (amount == 0)cout << "Undefined" << endl;elseprintf("%.2f\n", sum / amount);return 0;}
- PAT(A) 101-133-1-2016-03-12 A. Finding Average (20)
- Pat(A) 1108. Finding Average (20)
- [pat]1108. Finding Average (20)
- PAT 1108. Finding Average (20)
- pat 1108. Finding Average (20)
- PAT A1108. Finding Average (20/17)
- 【PAT】【Advanced Level】1108. Finding Average (20)
- PAT 甲级 1108. Finding Average (20)
- PAT--1108. Finding Average
- 【PAT】1108. Finding Average
- PAT 1108 Finding Average
- pat 1108. Finding Average
- PAT 甲级:1108. Finding Average
- pat 甲级 1108. Finding Average
- PAT (Advanced Level) Practise 1108Finding Average (20)
- 1108. Finding Average (20)-PAT甲级真题
- PAT (Advanced Level) Practise 1108 Finding Average (20)
- A1108. Finding Average (20)
- 不同浏览器内核
- MyBatis学习之四:MyBatis配置文件
- Zend Studio 快捷方法注释
- cvte笔试总结
- 用GDB调试程序(五)
- PAT(A) 101-133-1-2016-03-12 A. Finding Average (20)
- 用GDB调试程序(七)
- Github 上怎样把新 commits 使用在自己的 fork 上?
- android高级界面
- 用GDB调试程序(六)
- Java7源码浅析——对HashMap的理解
- DispatchAction 分派action与Dynimic form 动态表单
- meta标签的应用
- 用GDB调试程序(三)