1054 求平均值 (20 分)

2023-11-13

1054 求平均值 (20)(20 分)
本题的基本要求非常简单:给定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

第一遍没有做出来,有思路,但是我写的代码不想改了,因为贼乱,if—else 用的太多,这也是一个教训,代码结构混乱,导致难以修改,这时应该做函数封装
我的代码:不对
第二份的代码封装的很好,但是思路也是挺麻烦.
第三份柳神 的代码,巧妙用sscanf和ssprintf 解决问题
sscanf(

#include <iostream>
#include <ctype.h>
#include<stdlib.h>
 
using namespace std;
int find_char(string s,char c)
{
	int n = 0,position = -1;
	while((position = s.find(c,position+1)) != s.npos)
	{
		n++;
	}
	return n;
}
bool isNum(string s2)
{
	int i =0;
	if(s2[0] =='-')
		s2[0] = '0';
	s2[s2.find('.')] = '0'; 
	while(isdigit(s2[i++]));
	return i-1 == s2.length();
} 

int main()
{
	int n = 0,num = 0,jianhao = 0,point = 0;
	string s;
	double sum = 0.0;
	cin >> n;
	for(int i = 0;i < n;i++)
	{
		cin >> s;
		jianhao = find_char(s,'-');
		point = find_char(s,'.');
		if(jianhao == 0 || jianhao == 1){
			if(point == 0 || ((point == 1) && (s.length() - s.find('.') - 1 <= 2)))
			{		
					if(isNum(s))
					{
						double tmp  = atof(s.c_str());
						if(tmp >= -1000 && tmp <= 1000)
						{
							sum += tmp;
							num ++ ;
						}
						else 
						{
							cout << "ERROR: "<<s<< " is not a legal number" << endl;
						}
					}
					else{
						cout << "ERROR: "<<s<< " is not a legal number" << endl;
					}
			}
			else{
				cout << "ERROR: "<<s<< " is not a legal number" << endl;
			}
		}
		else{
			cout << "ERROR: "<<s<< " is not a legal number" << endl;
		}
		
		 

		
	}
 	if(sum == 0)
 	{
 		cout << "The average of 0 numbers is Undefined" <<endl;
	 }
	 else{
	 printf("The average of %d numbers is %.2lf",num,sum/(double)num); 
	 }

}

if…else 太多,而且思路过于简单,代码太混乱,参考别人的代码如下:


#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cctype>
using namespace std;
int n;
char str[101][101];
bool check(char s[]){
    int i = 0;
    if(s[0]=='-'){
        i++;
    }
    for(;s[i]&&s[i]!='.';i++){
        if(!isdigit(s[i])){
            return false;
        }
    }
    if(s[i]=='.'){
        for(int j=i+1;s[j];j++){
            if(!isdigit(s[j])||j-i>2){
                return false;
            }
        }
    }
    double a = fabs(atof(s));
    if(a>1000.0){
        return false;
    }
    return true;
}
void solve(){
    int ans = 0;
    double sum = 0;
    for(int i=0;i<n;i++){
        if(check(str[i])){
            ans++;
            sum += atof(str[i]);
        }else{
            printf("ERROR: %s is not a legal number\n",str[i]);
        }
    }
    if(ans){
        if(ans==1){
            printf("The average of 1 number is %.2lf\n",sum);
        }else{
            printf("The average of %d numbers is %.2f\n",ans,sum/ans);
        }
    }else{
        printf("The average of 0 numbers is Undefined\n");
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%s",str[i]);
    }
    solve();
    return 0;
    }
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
int main() {
    int n, cnt = 0;
    char a[50], b[50];
    double temp, sum = 0.0;
    cin >> n;
    for(int i = 0; i < n; i++) {
        scanf("%s", a);
        sscanf(a, "%lf", &temp);
        sprintf(b, "%.2f",temp);
        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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1054 求平均值 (20 分) 的相关文章

  • 【PAT】B1019 数字黑洞

    给定任一个各位数字不完全相同的 4 位正整数 xff0c 如果我们先把 4 个数字按非递增排序 xff0c 再按非递减排序 xff0c 然后用第 1 个数字减第 2 个数字 xff0c 将得到一个新的数字 一直重复这样做 xff0c 我们很
  • 【PAT(Advanced Level) Practice】1010 Radix(二分)

    链接 xff1a https pintia cn problem sets 994805342720868352 problems 994805507225665536 题意 xff1a 有两个数 N 1 xff0c N 2
  • PAT

    1045 快速排序 25分 著名的快速排序算法里有一个经典的划分过程 我们通常采用某种方法取一个元素作为主元 通过交换 把比主元小的元素放到它的左边 比主元大的元素放到它的右边 给定划分后的 N 个互不相同的正整数的排列 请问有多少个元素可
  • PAT BASIC LEVEL 1054. 求平均值 (20)

    1054 求平均值 20 本题的基本要求非常简单 给定N个实数 计算它们的平均值 但复杂的是有些输入数据可能是非法的 一个 合法 的输入是 1000 1000 区间内的实数 并且最多精确到小数点后2位 当你计算平均值的时候 不能把那些非法的
  • PAT乙级1037 在霍格沃茨找零钱 (20分)

    pragma warning disable 4996 include
  • L1-040. 最佳情侣身高差

    专家通过多组情侣研究数据发现 最佳的情侣身高差遵循着一个公式 女方的身高 1 09 男方的身高 如果符合 你俩的身高差不管是牵手 拥抱 接吻 都是最和谐的差度 下面就请你写个程序 为任意一位用户计算他 她的情侣的最佳身高 输入格式 输入第一
  • 【PAT】1033 旧键盘打字 (20 分)

    1033 旧键盘打字 20 分 旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及坏掉的那些键 打出的结果文字会是怎样 输入格式 输入在 2 行中分别给出坏掉的那些键 以及应该输入的文字 其中
  • L1-095 分寝室PTA

    学校新建了宿舍楼 共有 n 间寝室 等待分配的学生中 有女生 n0 位 男生 n1 位 所有待分配的学生都必须分到一间寝室 所有的寝室都要分出去 最后不能有寝室留空 现请你写程序完成寝室的自动分配 分配规则如下 男女生不能混住 不允许单人住
  • 分支-20. 计算符号函数的值(10)

    对于任一整数n 符号函数sign n 的定义如下 请编写程序计算该函数对任一输入整数的值 输入格式 输入在一行中给出整数n 输出格式 在一行中按照格式 sign n 函数值 输出该整数n对应的函数值 输入样例 1 10 输出样例 1 sig
  • 7-7 12-24小时制 (15 分) (C语言实现)

    题目 思路 直接跟着题目往下写 没有过多思考 后面答案部分正确 才重新写了12点那里的程序 11min 代码 include
  • PAT 1103 Integer Factorization

    题目的意思是给定n k p 求是否存在k个正整数 每个数的p次幂相加的结果等于n 有 输出k个数相加的结果最大的那个 如果有多个 输出序列从大到小排最大的那个 从左往右比较 若 i lt l a i
  • Pat刷题真题乙级(4)

    标题 前言 Pat乙级1013 组个最小数 Pat乙级1014 科学计数法 Pat乙级1017 打印沙漏 Pat乙级1018 人口普查 Pat乙级1019 旧键盘 前言 这个周末花了两天才写了五道题 嘿嘿 康康吧 Pat乙级1013 组个最
  • 1048 数字加密 (20 分)

    题目描述 本题要求实现一种数字加密方法 首先固定一个加密用正整数 A 对任一正整数 B 将其每 1 位数字与 A 的对应位置上的数字进行以下运算 对奇数位 对应位的数字相加后对 13 取余 这里用 J 代表 10 Q 代表 11 K 代表
  • 集合相似度(PAT)

    题目链接 https www patest cn contests gplt L2 005 一开始用map超时了 总是有一组数据超时 当时觉得很纳闷 后来学到了 其实set也是可以开数组的 map也是 include
  • 【PAT甲级A1125】 Chain the Ropes (25分)(c++)

    1125 Chain the Ropes 25分 作者 CHEN Yue 单位 浙江大学 代码长度限制 16 KB 时间限制 200 ms 内存限制 64 MB Given some segments of rope you are sup
  • PAT-组个最小数

    题目描述 给定数字0 9各若干个 你可以以任意顺序排列这些数字 但必须全部使用 目标是使得最后得到的数尽可能小 注意0不能做首位 例如 给定两个0 两个1 三个5 一个8 我们得到的最小的数就是10015558 现给定数字 请编写程序输出能
  • 【PAT乙级】旧键盘打字

    题目描述 旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及坏掉的那些键 打出的结果文字会是怎样 输入格式 输入在 2 行中分别给出坏掉的那些键 以及应该输入的文字 其中对应英文字母的坏键以大
  • PAT B1014

    include
  • 【PAT乙级】锤子剪刀布

    题目描述 大家应该都会玩 锤子剪刀布 的游戏 两人同时给出手势 胜负规则如图所示 现给出两人的交锋记录 请统计双方的胜 平 负次数 并且给出双方分别出什么手势的胜算最大 输入格式 输入第 1 行给出正整数 N 10 5 即双方交锋的次数 随
  • ts 流基础(白话讲解).

    author hjjdebug date 2022年 09月 27日 星期二 ts 流就是188个字节构成的流数据 先来点最简单的 ts 头部 4字节 ts 流是47开头的 以188字节为单位的打包流 由4字节包头及包体构成 4字节第一个4

随机推荐

  • QEventLoop 使用用例

    第一篇 QEventLoop 使用用例 问题描述 实验1 未使用 QEventLoop 实验2 使用 QEventLoop 问题描述 在while循环执行过程中同时响应其它时间 问题比较简单 记录一下实验过程 头文件 class MainW
  • 位运算计算规则

    0 0 0 0 1 0 1 0 0 1 1 1 按位与 两个相应的二进制位中都为1 该位的结果值为1 例 101010 110011 100010 0 0 0 0 1 1 1 0 1 1 1 1 按位或 两个相应的二进制位中只要有一个为1
  • 深入浅出设计模式之观察者设计模式

    举例 先让我们看一个简单的现实生活中的观察者设计模式 我们都知道老师与学生家长的关系 老师会把每次考试的成绩告诉家长 主题 只要是老师所教的班级的学生的家长才能收到 别的班级的家长不能收到 当学生毕业后 学生家长就无法收到学生成绩 只要产生
  • RabbitMQ理论+实战

    1 引出 1 1 中间件应用场景 1 跨系统数据传输 2 高并发的流量削峰 3 数据的分发与异步处理 4 大数据分析与传递 5 分布式事务 1 2 中间件常用协议 01 什么是协议 所谓协议是指 1 计算机底层操作系统和应用程序通讯时共同遵
  • 【华为OD机试/笔试真题 python】出错的或电路

    题目描述 出错的或电路 某生产门电路的厂商发现某一批次的或门电路不稳定 具体现象为计算两个二进制数的或操作时 第一个二进制数中某两个比特位会出现交换 交换的比特位置是随机的 但只交换这两个位 其他位不变 很明显 这个交换可能会影响最终的或结
  • 从零搭建完整python自动化测试框架(UI自动化和接口自动化 )——持续更新

    目录 一 总体框架 二 PO模式 DDT数据驱动 关键字驱动 三 框架技术选择 四 框架运行结果 五 各用例对应的定义方式 PO DDT 六 API接口定义方式 七 测试执行结果 从零开始搭建项目 一 开发环境搭建 二 新建项目 三 基础功
  • 软件测试分类、分级与软件缺陷管理

    软件测试分类与分级 4 1软件测试分类 4 1 1是否关心内部结构 1 白盒测试 白盒测试一般是静态测试 注重于内部结构 又称为结构测试或逻辑驱动测试 是一种按照程序内部逻辑结构和编码结构设计测试数据并完成测试的一种测试方法 2 黑盒测试
  • 回复上一篇文章,RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling cublasCreate(handle)成功解决

    回应自己的上一篇文章地址在这 花了两天时间 找了各种方法 各种案例 以及各种的尝试 修改了很多次 也尝试用CPU去跑 后面发现还是跑不起来这个数据集 我罗列一部分方法 方法一 改batch size 的值 有的人问题就是这个 方法二 系统的
  • 报错“Cannot read properties of null (reading ‘addEventListener‘)“

    场景 控制台报错 Cannot read properties of null reading addEventListener 错误原因 因为 JavaScript 中操作DOM元素的函数方法需要在 HTML 文档渲染完成后才可以使用 如
  • 三层交换机配置----ensp

    没有你需要的三层交换配置类型 评论区留言 博主第一时间补充 说明 交换机统一为S3700 连接线为Ethernet 目录 一 最简形式 二 一交换机 多主机 三 三层交换机 二层交换机 四 两台三层交换机 一 最简形式 system vie
  • 国外那些富有创意的 404 页面

    点击上方 前端号 点亮你的前端技能树 最近在搜集前端相关文章时 无意看到了几篇关于国内外 404 页面的收集 觉得很多网站的 404 页面 特别富有创意 所以趁着周末还有些空余的时间 去梳理了一份富有创意的 国外网站 404 页面 正值周末
  • QT开发(二)(信号和槽)

    QT开发 标准信号和槽 自定义槽 带参信号 Lambda表达式 代码 标准信号和槽 main cpp如图所示 诸多的控件应该在主窗口中去实现而不应在主函数中实现 改变编码 TOOLS gt options gt TextEditor gt
  • Qt之QThread详解

    一 线程管理 1 线程启动 void start Priority priority InheritPriority 调用后会执行run 函数 但在run 函数执行前会发射信号started 操作系统将根据优先级参数调度线程 如果线程已经在
  • mac解决Enter passphrase for key每次输入密码

    欢迎点击领取 前端面试题进阶指南 前端登顶之巅 最全面的前端知识点梳理总结 分享一个使用比较久的 1 理解公钥 私钥 当我们关联好自己的git时 发现每次pull 或 push代码时会让我们重复性输入自己的密码 问题不是出在我们关联的不对
  • centos6和centos7防火墙的关闭

    原文 CentOS6 5查看防火墙的状态 1 zh localhost service iptable status 显示结果 1 2 3 4 5 zh localhost service iptable status Redirectin
  • MATLAB使用单纯形法解决线性规划问题,函数形式调用,举例演示

    线性规划隶属于范畴学 在现实的应用十分广泛 简单来说 就是自变量在线性约束的条件下 求线性函数的最小值或最大值 对于优化问题 其数学模型往往需要提取出关键的三要素 即 自变量相关的约束条件 自变量的取值范围 关于自变量的目标函数 对于线性规
  • 【泛微E9开发】workflowservice创建流程

    最下面附demo下载地址 包括所需要的JAR文件 package test WorkflowServicePortType import org junit Test import weaver workflow webservices W
  • python创意作品-python的作品

    广告关闭 2017年12月 云 社区对外发布 从最开始的技术博客到现在拥有多个社区产品 未来 我们一起乘风破浪 创造无限可能 发现了编程与艺术又一个契合点 小开心一下 其实这个过程非常简单 我们先看作品 后讲解代码 python书法作品1
  • 自定义TableLayoutPanel使它能够在运行时用鼠标改变行高和列宽。

    using System using System Collections Generic using System ComponentModel using System Drawing using System Windows Form
  • 1054 求平均值 (20 分)

    1054 求平均值 20 20 分 本题的基本要求非常简单 给定N个实数 计算它们的平均值 但复杂的是有些输入数据可能是非法的 一个 合法 的输入是 1000 1000 区间内的实数 并且最多精确到小数点后2位 当你计算平均值的时候 不能把