zoukankan      html  css  js  c++  java
  • 1054. 求平均值 (20)

    1054. 求平均值 (20)

    时间限制
    400 ms
    内存限制
    65536 kB

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

     分析:用string输入每一个数字s,满足以下条件时合法:
      1首字符为数字、'+' 或' -' ;     2其他字符皆为数字或有一个 ' . ';  3出现一个' . '后最多还有两位数字;
      4满足以上后 用 stof ( s ) 转为数字,当数字在[-1000,1000]内时才合法。
     注意:当只有1个合法数字时number为单数。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int main(){
     5     int n,sn=0;
     6     double sum=0;
     7     string s;
     8     cin>>n;
     9     for(int i=0;i<n;i++){
    10         cin>>s;
    11         bool ok=false;
    12         if(isdigit(s[0])||s[0]=='+'||s[0]=='-'){
    13             int j;
    14             for(j=1;j<s.length();j++){
    15                 if(s[j]=='.'){
    16                     if(j+3<s.length()) break;
    17                     int k;
    18                     for(k=j+1;k<s.length();k++)///
    19                         if(!isdigit(s[k])) break;
    20                     if(k<s.length()) break;
    21                     ok=true;
    22                 }
    23                 else if(!isdigit(s[j])) break;
    24             }
    25             if(j==s.length()) ok=true;
    26         }
    27         if(ok) {
    28             double x=stof(s);
    29             if(x>=(-1000)&&x<=1000){
    30                 sum+=x;
    31                 sn++;
    32             }
    33             else printf("ERROR: %s is not a legal number
    ",s.c_str());
    34         }
    35         else printf("ERROR: %s is not a legal number
    ",s.c_str());
    36     }
    37     if(sn==1) printf("The average of 1 number is %.2lf",sum);///
    38     else if(sn!=0) printf("The average of %d numbers is %.2lf",sn,sum/sn);
    39     else printf("The average of 0 numbers is Undefined");
    40     return 0;
    41 } 
  • 相关阅读:
    跟着百度学习之ThinkPHP的认识/初窥
    Apache Rewrite 拟静态
    最新PHPcms9.6.0 任意文件上传漏洞
    最新phpcms v9.6.0 sql注入漏洞分析
    蓝牙攻击-基础篇
    emblog后台拿shell
    绕过云盾找真实IP-找真实IP-绕过CDN
    程序员最重要的品质是什么?
    VC++ 6.0中添加库文件和头文件
    程序的链接与装载
  • 原文地址:https://www.cnblogs.com/Fresh--air/p/8577550.html
Copyright © 2011-2022 走看看