zoukankan      html  css  js  c++  java
  • 12-1054. 求平均值

                  1054. 求平均值 (20)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    本题的基本要求非常简单:给定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

    01:
    #include <cstring>
    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int main(){
    	int n;
    	string s;
    	double sum = 0;
    	int count = 0;
    	cin >> n;
    	for(int k = 0; k < n; k++){
    		cin >> s;
    		double b = 0, c = 0;   //b记录整数部分,c记录小数部分 
    		if(s[0] == '-'){       //为负数的情况 
    			int i = 1;
    			while(s[i] >= '0' && s[i] <= '9'){
    				b = b * 10 + s[i] - '0';
    				i++;
    			}
    			
    			if(s[i] == '.'){
    				int j = i + 1;
    				double l = 0.1;
    				while(s[j] >= '0' && s[j] <= '9'){
    					c += l * (s[j] - '0');
    					j++;
    					l *= 0.1;
    				}
    				if(j - i - 1 > 2 || j + 1 < s.length()){
    					cout << "ERROR: " << s << " is not a legal number" << endl;
    					continue;
    				}
    			}
    			if(b + c < -1000 || b + c> 1000){
    				cout << "ERROR: " << s << " is not a legal number" << endl;
    				continue;
    			}			
    			count++;
    			sum += -b - c;	
    		}
    		else if(s[0] >= '0' && s[0] <= '9'){  //非负数 
    			int i = 0;
    			while(s[i] >= '0' && s[i] <= '9'){
    				b = b * 10 + s[i] - '0';
    				i++;
    			}
    			
    			if(s[i] == '.'){
    				int j = i + 1;
    				double l = 0.1;
    				while(s[j] >= '0' && s[j] <= '9'){
    					c += l * (s[j] - '0');
    					j++;
    					l *= 0.1;
    				}
    				if(j - i - 1 > 2 || j < s.length()){
    					cout << "ERROR: " << s << " is not a legal number" << endl;
    					continue;
    				}
    			}
    			if(b + c < -1000 || b + c> 1000){
    				cout << "ERROR: " << s << " is not a legal number" << endl;
    				continue;
    			}
    			
    			count++;
    			sum += b + c;	
    		}
    		else{
    			cout << "ERROR: " << s << " is not a legal number" << endl;
    		}
    	}
    	if(count == 0){
    		printf("The average of 0 numbers is Undefined");
    	}
    	else if(count == 1)
    		printf("The average of 1 number is %.2lf", sum);
    	else
    		printf("The average of %d numbers is %.2lf", count, sum / count);
    	return 0;
    }
    

     02:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    
    int main(){
    	char a[50], b[50];				//尽量大点,不能提前预知非法数据的长短 
    	int n, count = 0, flag = 0;
    	double sum, temp;
    	cin >> n;
    	for(int i = 0; i < n; i++){
    		flag = 0;
    		cin >> a;	
    		sscanf(a, "%lf", &temp);    //a必须是char类型,不能是string 
    		sprintf(b, "%.2lf", temp);
    		for(int j = 0; j < strlen(a); j++){
    			if(a[j] != b[j])
    				flag = 1;
    		}
    		if(flag == 1 || temp > 1000 || temp < -1000){
    			cout << "ERROR: " << a << " is not a legal number" << endl;
    			continue;
    		}
    		sum += temp;
    		count++;
    	}
    	if(count == 0){
    		printf("The average of 0 numbers is Undefined");
    	}
    	else if(count == 1)
    		printf("The average of 1 number is %.2lf", sum);
    	else
    		printf("The average of %d numbers is %.2lf", count, sum / count);
    	return 0; 
    } 
    
  • 相关阅读:
    自动从vss下载代码并编译的脚本
    自动执行Sql脚本的批处理
    编译 SharpDevelop2.2源码 经过
    .net框架源代码批量下载器使用方法
    sql server 解决孤立用户问题
    元数据学习分享
    SQL注入攻击的原理及其防范措施(转)
    .Net Remoting和Web Service浅析(转)
    usercontrol 和 page 的继承
    如何提高页面现实速度
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/7466215.html
Copyright © 2011-2022 走看看