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

news2024/11/25 4:53:31

【题目描述】

输入一些整数,求出它们的最小值、最大值和平均值(保留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.coloradmin.cn/o/1565826.html

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

相关文章

高分顶刊,仅2个月录用,13天见刊!另有CCF仅36天录用!

1区人工智能类SCIE &#xff08;高质量&#xff0c;进展顺&#xff09; 【期刊简介】IF&#xff1a;6.0-7.0&#xff0c;JCR1区&#xff0c;中科院2区 【检索情况】SCIE在检 【征稿领域】机器学习、云计算、边缘计算相关均可 【案例分享】2023.10.31 提交——2024.01.31 录…

ES6学习(四)-- Reflect / Promise / Generator 函数 / Class

文章目录 1. Reflect1.1 代替Object 的某些方法1.2 修改某些Object 方法返回结果1.3 命令式变为函数行为1.4 ! 配合Proxy 2. ! Promise2.1 回调地狱2.2 Promise 使用2.3 Promise 对象的状态2.4 解决回调地狱的方法2.5 Promise.all2.6 Promise.race 3. Generator 函数3.1 基本语…

计算机网络|谢希仁版|数据链路层

数据链路层 数据链路层研究的是什么&#xff1f;数据链路层的几个共同问题数据链路与链路帧通信规程 三个基本问题封装成帧透明传输差错检测可靠传输 点对点协议PPPPPP协议应满足的需求PPP协议的组成PPP协议帧的格式各字段的意义字节填充零比特填充PPP协议的工作状态 使用广播信…

How to install JDK on mac

文章目录 1. Install JDK on mac2. zshenv, zshrc, zprofile3. 查看java环境变量配置 1. Install JDK on mac Installation of the JDK on macOS 2. zshenv, zshrc, zprofile How Do Zsh Configuration Files Work? 3. 查看java环境变量配置 open Terminal&#xff0c;cd…

C++ AVL树(旋转)

我们之前学习了搜索二叉树&#xff0c;我们知道普通的搜索二叉树会有特殊情况出现使得二叉树的两枝极其不平衡形成我们通俗说的歪脖子树&#xff1a; 这样的树一定会使得我们的增删查的效率变低&#xff1b;为了避免这种极端的情况出现&#xff0c;在1962年有两位伟大的俄罗斯数…

集成电路企业tapeout,如何保证机台数据准确、完整、高效地采集?

Tapeout即流片&#xff0c;集成电路行业中将CDS最终版电路图提交给半导体制造厂商进行物理生产的过程。在芯片设计与制造的流程中&#xff0c;Tapeout是非常重要的阶段&#xff0c;包括了布局&#xff08;Layout&#xff09;、连线&#xff08;Routing&#xff09;、分析&#…

阿里云服务器租用费用价格表_一年和1个月收费标准(2024版)

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…

【论文速读】| MASTERKEY:大语言模型聊天机器人的自动化越狱

本次分享论文为&#xff1a;MASTERKEY: Automated Jailbreaking of Large Language Model Chatbots 基本信息 原文作者&#xff1a;Gelei Deng, Yi Liu, Yuekang Li, Kailong Wang, Ying Zhang, Zefeng Li, Haoyu Wang, Tianwei Zhang, Yang Liu 作者单位&#xff1a;南洋理工…

记录一次官网访问很慢的情况

客户查看云监控,带宽未超限,客户取的是1分钟的原生值,也就是1分钟也是个平均值。 但是客户的原始值&#xff0c;其实就是1分钟内的平均值。所以客户的瞬时超限&#xff0c;其实是看不出来的。但是后端同事从实时监控里面可以看到超限的情况。 客户升带宽后&#xff0c; 发现还…

超详细工具Navicat安装教程

Navicat是一款功能强大的数据库管理工具&#xff0c;可用于管理多种类型的数据库&#xff0c;包括MySQL、MariaDB、SQL Server、SQLite、Oracle和PostgreSQL等。以下是Navicat工具的一些主要特点和功能&#xff1a; 一.功能介绍 跨平台支持 多种数据库支持 直观的用户界面 数据…

【Qt 学习笔记】输入框实现helloworld | QLineEdit的使用

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 输入框实现helloworld | QLineEdit的使用 文章编号&#xff1a;Qt 学习…

【原创教程】EPLAN中伺服的制图方法

首先在EPLAN里制作伺服之前,需要有伺服的手册,根据手册里的各个引脚号的说明来制图,这里我们讲解西门子和三菱这两种品牌型号的。 1、下图是西门子的伺服,型号为:6SL3040-1LA01-0AA0 2、第一步我们需要绘制出黑盒来表示伺服的整体外框 选择插入—盒子—黑盒 3、在图纸…

MQTT中QOS级别

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的通信协议&#xff0c;在物联网和消息传递系统中广泛应用。MQTT 提供了三个不同的 QoS&#xff08;Quality of Service&#xff09;等级&#xff0c;用于确保消息的可靠性和传输效率。本文将详细…

通过SSH在苹果手机上查看系统文件:远程访问iOS文件系统的方法

​ 目录 引言 用户登录工具和连接设备 查看设备信息&#xff0c;电池信息 查看硬盘信息 硬件信息 查看 基带信息 销售信息 电脑可对手机应用程序批量操作 运行APP和查看APP日志 IPA包安装测试 注意事项 引言 苹果手机与安卓手机不同&#xff0c;无法直接访问系统文件…

游戏陪玩平台开发 定制专属陪玩平台-移交源码二次开发,线下可改陪诊,陪伴,家政等功能

线下陪玩接单服务软件系统搭建&#xff08;APP&#xff0c;h5小程序&#xff0c;公众号开发&#xff09;&#xff0c;陪玩接单服务小程序开发搭建&#xff0c;陪玩接单服务系统开发设计&#xff0c;陪玩接单服务软件开发制作&#xff0c;陪玩接单服务平台开发方案 随着人们生活…

记Postman参数化

因为需要在WEB页面上处理部分数据&#xff0c;手动操作太慢&#xff0c;所以考虑使用接口方式处理&#xff0c;因急于使用&#xff0c;用Python Request的方式&#xff0c;写代码也来得慢&#xff0c;故采用Postman加外部文件参数化方式来实现。 接口请求是Post方式&#xff0c…

流域生态系统水-碳-氮耦合过程模拟

原文链接&#xff1a;流域生态系统水-碳-氮耦合过程模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247599933&idx1&sn64dd4dae8b54e7f2c4a18a2729f423d4&chksmfa8206dacdf58fcc4ff9cb95443bdbd238b0f38f0616bbe53c093f68c851f2526a82898c69d2&…

Bessie‘s Birthday Cake (Hard Version)

题目链接 CodeTON Round 8 (Div. 1 Div. 2, Rated, Prizes!) C2. Bessie’s Birthday Cake (Hard Version) 思路&#xff1a; 其实可以先做一下easy version。 先不选点&#xff0c;已有的点我们肯定能加多少边就加多少&#xff0c;而且手玩后发现一个规律&#xff0c;就是…

Lua环境下载与配置

这里介绍如何下载已经编译好的Lua环境&#xff0c;如何配置Lua环境。 如希望自己从源码编译Lua环境&#xff0c;请自行搜索资料。 第一步&#xff1a;下载编译好的lua环境 打开下面链接&#xff0c;然后根据指引下载。 The Programming Language Luahttps://www.lua.org/hom…

基于卷积神经网络的苹果等级分类系统(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

功能演示&#xff1a; 苹果等级分类系统&#xff0c;基于vgg16&#xff0c;resnet50卷积神经网络&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的苹果等级分类系统是在pytorch框架下实现的&#xff0c;系统中有两…