• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
村雨sup
自己选的路,跪着也要走完 XD
博客园    首页    新随笔    联系   管理    订阅  订阅
PAT 1108 Finding Average
1108 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 [−] 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 (≤). 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:

7
5 -3.2 aaa 9999 2.3.4 7.123 2.35

Sample Output 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

Sample Input 2:

2
aaa -9999

Sample Output 2:

ERROR: aaa is not a legal number
ERROR: -9999 is not a legal number
The average of 0 numbers is Undefined
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;


int main(){
    int n,cnt = 0;
    cin >> n;
    char a[50],b[50];
    double temp,sum = 0.0;
    for(int i=0;i < n;i++){
        scanf("%s",a);
        sscanf(a,"%lf",&temp);  //格式和scanf差不多,从a输入到temp  temp加&
        sprintf(b,"%.2f",temp); //从temp输出到b
        int flag = 0;
        for(int j=0;j < strlen(a);j++)if(a[j]!=b[j])flag = 1;

        if(flag||temp < -1000||temp > 1000){
            printf("ERROR: %s is not a legal number\n", a);
            continue;
        }
        else{
            sum += temp;
            cnt++;
        }
    }

    if(cnt == 1)printf("The average of 1 number is %.2f", sum);
    else if(cnt > 1)printf("The average of %d numbers is %.2f", cnt, sum / cnt);
    else printf("The average of 0 numbers is Undefined");

    return 0;
}

sscanf 和 sprintf!!学到了

 
posted on 2019-05-01 14:11  村雨sup  阅读(122)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3