“多组数组”题的注意事项,天杀的“鲁棒性”

【题目描述】

输入一些整数,求出它们的最小值、最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000的整数。

输入包含多组数据,每组数据第一行是整数个数n,第二行是n个整数。n=0为输入结束标记,程序应当忽略这组数据。相邻两组数据之间应输出一个空行。

【样例输入】

8

2 8 3 5 1 7 3 6

4

-4 6 10 0

0

【样例输出】

Case 1: 1 8 4.375

Case 2: -4 10 3.000

【题目来源】

刘汝佳《算法竞赛入门经典  第2版》例题2-6 数据统计II

【解析】

本题涉及输入多组数据,直接上书中代码:

#include<stdio.h>
#define INF 1000000000
int main(){int x, n = 0, min = INF, max = -INF, s = 0, kase = 0;while(scanf("%d", &n) == 1 && n){int min = INF, max = -INF, s = 0;for(int i = 0; i < n; i++) {scanf("%d", &x);s += x;if(x < min) min = x;if(x > max) max = x;}if(kase) printf("\n");printf("Case %d: %d %d %.3f\n", ++kase, min, max, (double)s/n);}return 0;
}

这段代码有几个原书指出的要点:

(1)程序健壮性:虽然题目指明n=0为输入结束标记,但有时题目设计也会出错,真实数据可能忘记以n=0结尾。为了防止这种情况带来不必要的丢分,最好的方法就是在代码中增加一道保险,使其不输入0也能正常结束输入,这时就又会用到scanf("%d", &n) == 1来进行输入结束判断(原理详见《非常绕的“输入结束”信号》一文)。这种增加保险的代码在计算机中称之为“鲁棒性(robustness)”。

这里老金不得不吐槽两句,去**的“鲁棒性”!这是一个典型的把简单问题复杂化,莫名其妙装叉,看似高深莫测实则不伦不类的词。因为“鲁棒性”纯粹是个音译词。也不是说音译词就不好,在没有合适的中文表达情形下也无可厚诽。关键是,robustness明明有那么明确又通俗易懂的汉语意思“健壮性”,你却偏偏搞出这个生僻的音译飞机,这不是明显的装叉大以巴狼嘛!

更有甚者,有人还强行从汉字字义加以解释,老金搬来权当一乐。

逻辑是这样的:

总结起来就是:

不得不说,这个总结还真有创意,但咱们又不是在搞古文运动。况且,这种组合词本身意思也不明朗,我也可以解释成“鲁莽的人很棒”、“粗鲁的人很棒”、愚鲁的人很棒”,甚至可以解释成“鲁讯很棒”。所以,即便能像前面高人这样强行解释,对于大众来说,它也绝对不是一个好词。它就是不够简明,不够通俗易懂。任何一个人第一次面对它,都会莫名其妙。随便用“健壮性”、“容错性”、“可靠性”,哪怕是“抗造性”,最不济用“程序猛男”也比这个词更容易理解。

此外,老金真心觉得上面的字意引申过程不够平滑,特意查了字典,重新梳理下逻辑。

鲁:象形字,上鱼下口→鱼入口中→吃到了美味佳肴→美好。上面是字典中能查到的,

然后在前人的启发下进一步开启老金脑补模式:美好的东西自然要多多益善→东西一多总体积就会变“大”→大的东西就“粗”→粗大的东西就不灵活,就比较“愚钝”,于是有了“愚鲁”→“愚鲁”的人往往比较“粗俗”,于是有了“粗鲁”、“鲁莽”。

(2)输出格式:程序要求“相邻两组数据之间应输出一个空行”。要准确理解这句话的意思,即第一行前不能有空行,最后一行后不能有空行。if(kase) printf("\n");就是为了实现这个功能。这里尤其要说明的一点,虽然最后的printf语句中也有\n,但它只是换行,即把光标移到下一行,但不代表下一行就是空行。所以,最后一组数据输出后是不会输出空行的。

(3)变量重置:这是一个易错点。因为本题涉及“多组数据”输入。因此,为了避免上一组数据运算过后变量的值对下一组数据运算的结果产生影响,需要在进行每一组数据运算前都要对参与运算的变量进行重新初始化。题中对运算结果有影响的变量有4个:x、min、max、s。它们都应在while循环内每次运算前进行初始化。x是由用户输入的值进行初始化的,不会有问题。关键是min、max、s这3个变量,很容易放在while之外。要说明的是,像代码中那样里外都进行变量定义和初始化也是可以的,因为内层的变量会屏蔽外层的同名变量,只不过外层的那些都是多此一举。

除以上要点之外,老金还有必要提出一点,就是代码运行后的输入和输出是交叉出现在画面中的,即像下面这样。

这貌似很混乱,与题目输入、输出要求相悖,实际上是没问题的,因为输入和输出天然就是是分开的,咱们只要保证分别从输入、输出两方面看与题目要求相符即可,不用因此担心丢分。

如果非要使输出结果中的输入、输出区分开来也是可以的,就要用到二维组,用来存储每次运算后的输出结果。

假设最多输入100组数据,代码如下:

#include<stdio.h>
#define INF 1000000000
int main(){int x, n = 0, min = INF, max = -INF, s = 0, kase = 0, a[100][2];double b[100][1];while(scanf("%d", &n) == 1 && n){int min = INF, max = -INF, s = 0;for(int i = 0; i < n; i++) {scanf("%d", &x);s += x;if(x < min) min = x;if(x > max) max = x;}a[kase][0] = min;a[kase][1] = max;b[kase][0] = (double)s/n;kase++;}for(int i=0; i<kase; i++){if(i) printf("\n");printf("Case %d: %d %d %.3f\n", i+1, a[i][0], a[i][1], b[i][0]);}return 0;
}

输出结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1323580.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[C++初阶]初识C++(一)—————命名空间和缺省函数

声明: 本篇文献内容选自百度文库、比特就业课 代码内容部分选自比特就业课 一、命名空间 1.什么是命名空间 在编程语言中&#xff0c;命名空间是一种特殊的作用域&#xff0c;它包含了处于该作用域中的所有标示符&#xff0c;而且其本身也是由标示符表示的。命名空间的使用目…

vue3+echarts:echarts地图打点显示的样式

colorStops是打点的颜色和呼吸灯、label为show是打点是否显示数据、rich里cnNum是自定义的过滤模板用来改写显示数据的样式 series: [{type: "effectScatter",coordinateSystem: "geo",rippleEffect: {brushType: "stroke",},showEffectOn: &quo…

权限提升-Linux系统权限提升篇VulnhubRbash绕过DockerLXD容器History泄漏shell交互

知识点 1、普通用户到Linux-泄漏-History 2、普通用户到Linux-限制-Rbash绕过 3、普通用户到Linux-容器-LXD&Docker 4.Linux系统提权-web/普通用户-docker逃逸&提权&shell交互 章节点&#xff1a; 1、Web权限提升及转移 2、系统权限提升及转移 3、宿主权限提升及…

STM32 移植 LVGL -- 教程图解

&#xff08; 编辑状态中&#xff0c;已完成80%&#xff0c;估计清明假期后完成更新 ) 移植效果&#xff0c;先睹为快&#xff1a; 目录 一、LVGL 简述 二、准备一个STM32的工程 三、LVGL 官方下载 四、裁剪 源文件 五、添加 源文件 六、注册 显示 七、注册 触摸输入 八…

语言模型进化史(上)

由于篇幅原因&#xff0c;本文分为上下两篇&#xff0c;上篇主要讲解语言模型从朴素语言模型到基于神经网络的语言模型&#xff0c;下篇主要讲解现代大语言模型以及基于指令微调的LLM。文章来源是&#xff1a;https://www.numind.ai/blog/what-are-large-language-models 一、语…

【C++入门】初识C++

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

单片机家电产品--过零检测

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 单片机家电产品–过零检测 前言 记录学习单片机家电产品内容 已转载记录为主 一、知识点 1 什么是过零检测 1 过零检测指的是在交流系统中&#xff0c;在一个交流周期中…

第12章 集合框架

一 集合框架概述 1.1 生活中的容器 1.2 数组的特点与弊端 一方面&#xff0c;面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用数组存储对象方面具有一些弊端&#xff0c;而Java 集合…

搜索--找出克隆二叉树中的相同节点

题目描述 给你两棵二叉树&#xff0c;原始树 original 和克隆树 cloned&#xff0c;以及一个位于原始树 original 中的目标节点 target。 其中&#xff0c;克隆树 cloned 是原始树 original 的一个 副本 。 请找出在树 cloned 中&#xff0c;与 target 相同 的节点&#xff…

蓝桥杯备考

目录 P8823 [传智杯 #3 初赛] 期末考试成绩 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码 P8828 [传智杯 #3 练习赛] 直角三角形 题目描述 输入格式 输出格式 输入输出样例 代码 P8833 [传智杯 #3 决赛] 课程 题目背景 题目描述 输入格式 输出格式…

vivado eFUSE 寄存器访问和编程

eFUSE 寄存器访问和编程 注释 &#xff1a; 在 MPSoC 和 Versal 器件上不支持以下 eFUSE 访问和编程方法。 7 系列、 UltraScale 和 UltraScale 器件具有一次性可编程位用于执行特定功能 &#xff0c; 称为 eFUSE 位。不同 eFUSE 位类型如 下所述&#xff1a; • …

突破校园网限速:使用 iKuai 多拨分流负载均衡 + Clash 代理(内网带宽限制通用)

文章目录 1. 简介2. iKuai 部署2.1 安装 VMware2.2 安装 iKuai(1) 下载固件(2) 安装 iKuai 虚拟机(3) 配置 iKuai 虚拟机(4) 配置 iKuai(5) 配置多拨分流 2.3 测试速度 3. Clash 部署3.1 准备工作(1) 配置磁盘分区(2) 安装 Docker(3) 安装 Clash(4) 设置代理 1. 简介 由于博主…

新质生产力丨zData X 数据库一体机助力财政一体化平台全面升级

在数字化转型的大潮中&#xff0c;某财政局积极响应国家财政管理现代化的战略部署&#xff0c;启动了财政一体化平台升级改造工程。该项目旨在将财政局内部各部门及其各自独立的业务系统进行全面整合&#xff0c;构建起一个集约化的财政管理平台&#xff0c;力求通过技术创新推…

字符分类函数

字符分类函数 C语言中有⼀系列的函数是专门做字符分类的&#xff0c;也就是⼀个字符是属于什么类型的字符的。这些函数的使用都需要包含⼀个头文件是 ctype.h 这些函数的使用方法非常类似&#xff0c;我们就讲解⼀个函数的事情&#xff0c;其他的非常类似&#xff1a; int i…

合同约定的绩效奖金说不给就不给了, 这合法吗?

目录 一、北京海淀法院参考案例 二、关于绩效奖金的性质&#xff1f; 三、绩效奖金应否发放取决于哪些因素&#xff1f; 四、员工如何举证与质证 五、提前离职的员工 是否享受当年度绩效奖金&#xff1f; 一、北京海淀法院参考案例 https://mp.weixin.qq.com/s/sq0mFCC8M…

在哪申请免费IP地址证书

IP证书&#xff0c;也被称为IP SSL证书&#xff0c;是一种特殊的SSL证书&#xff0c;不同于传统的域名验证&#xff08;DV&#xff09;证书&#xff0c;它是通过验证公网IP地址而不是域名来确保安全连接。这种证书是用于保护IP地址&#xff0c;并在安装后起到加密作用。 申请条…

数据结构算法题(力扣)——链表

以下题目建议大家先自己动手练习&#xff0c;再看题解代码。这里只提供一种做法&#xff0c;可能不是最优解。 1. 移除链表元素&#xff08;OJ链接&#xff09; 题目描述&#xff1a;给一个链表的头节点 head 和一个整数 val &#xff0c;删除链表中所有满足值等于 val 的节点…

全面的Docker快速入门教程(详细)

前言&#xff1a; 都2024年了&#xff0c;你还在为了安装一个开发或者部署环境、软件而花费半天的时间吗&#xff1f;你还在解决开发环境能够正常访问&#xff0c;而发布测试环境无法正常访问的问题吗&#xff1f;你还在为持续集成和持续交付&#xff08;CI / CD&#xff09;工…

代码随想录第29天|491.递增子序列 46.全排列 47.全排列 II

目录&#xff1a; 491.递增子序列 46.全排列 47.全排列 II 491.递增子序列 491. 非递减子序列 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bili…

2023最新汽车网络安全报告汇总

2023最新汽车网络安全报告、安全参考架构及指南汇总&#xff0c;供大家学习参考。https://t.zsxq.com/18RkG260k 汽车信息安全法律法规及标准全景图V3.2.pdf 车载智能计算基础平台参考架构2.0.pdf 车载智能计算芯片白皮书(2023版).pdf 智能驾驶行为安全评价方法发布版.pdf 智能…