当前位置: 首页 > ds >正文

老题新解|不与最大数相同的数字之和

《信息学奥赛一本通》第93题:不与最大数相同的数字之和

题目描述
输出一个整数数列中不与最大数相同的数字之和。
输入格式
输入分为两行:
第一行为 N(NN(NN(N 为接下来数的个数,N≤100)N \le 100)N100)
第二行为 NNN 个整数,数与数之间以一个空格分开,每个整数的范围是 −1000,000-1000,0001000,0001000,0001000,0001000,000
输出格式
输出为 NNN 个数中除去最大数其余数字之和。
输入输出样例 #1
输入 #1
3
1 2 3
输出 #1
3

大家好,我是莫小特。
这篇文章给大家带来《信息学奥赛一本通》中的第 93 题:不与最大数相同的数字之和。

image.png

一、题目描述

洛谷的题号是:B2094 不与最大数相同的数字之和

image.png

二、题意分析

这道题是信息学奥赛一本通练习题的第 93 题。

根据输入格式的描述,输入有两行,第一行为 N,数据范围:N≤100N \le 100N100,使用 int 类型。

int N;
cin>>N;

第二行为 N 个整数,每个整数的范围:−1000,000-1000,0001000,0001000,0001000,0001000,000,使用 int 类型进行存储,元素个数为:110,for 循环对数据进行输入。

int a[110];
for(int i=1;i<=N;i++)
{cin>>a[i];
}

题目要求我们找出数列中不与最大数相同的数字之和,因此需要先找出最大数,可以设定第一个数为最大数。

int maxx=a[1];

之后从下标为 2 的数开始,访问寻找最大的数。

for(int i=2;i<=N;i++)
{if(a[i]>=maxx){maxx=a[i];//找最大值}
}

找到最大值后,我们需要取出最大数中的其余数字之和,考虑到有可能有多个和最大值相同的数,因此需要使用 for 循环来遍历,去掉最大值,即数值中不等于最大值的。

计算总和时,需要定义一个变量,并初始化为 0。

int sum=0;
for(int i=1;i<=N;i++)//切记要从下标为1开始访问
{if(a[i]!=maxx){sum+=a[i];}
}

最后输出 sum 即可。

cout<<sum;

按照样例输入对数据进行验证。

image.png

符合样例输出,到网站提交测评。

image.png

测试通过!

找最大值还有其他方法:将最大值初始化为一个很小的数,这样能确保数组中的数字能够被替换,在输入时就可以不断的更新最大值。

最后计算总和时,直接剔除最大值进行累加即可。

int maxx=-1000000;
for(int i=1;i<=N;i++)
{cin>>a[i];if(a[i]>maxx){maxx=a[i];}
}
int sum=0;
for(int i=1;i<=N;i++)
{if(a[i]!=maxx){sum+=a[i];}
}

三、完整代码

该题的完整代码如下:

代码1:

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{int N;cin>>N;int a[110];for(int i=1;i<=N;i++){cin>>a[i];}int maxx=a[1];for(int i=2;i<=N;i++){if(a[i]>=maxx){maxx=a[i];//找最大值}}int sum=0;for(int i=1;i<=N;i++)//切记要从下标为1开始访问{if(a[i]!=maxx){sum+=a[i];}}cout<<sum;return 0;
}

代码2:

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{int N;cin>>N;int a[110];int maxx=-1000000;for(int i=1;i<=N;i++){cin>>a[i];if(a[i]>maxx){maxx=a[i];}}int sum=0;for(int i=1;i<=N;i++){if(a[i]!=maxx){sum+=a[i];}}cout<<sum; return 0;
}

四、总结

这道题考察的知识点很基础,但也非常典型,主要涉及:

1、数组输入与存储:输入 N 个整数存入数组,注意下标从 1 还是 0 开始,写法要统一。

2、最大值查找:

有两种方式:

(1)先假设第一个数是最大值,再逐个比较更新;

(2)直接将 maxx 初始化为一个极小的数,在输入时一边更新。

(3)条件累加:题目要求的是“不与最大数相同的数字之和”,所以在遍历时要判断 a[i] != maxx

常见易错点:

(1)忘记考虑数组中多个最大值的情况。如果只排除一个最大值而不是所有最大值会出错。

(2)输入规模虽然只有 N≤100N \leq 100N100,但是数值范围可能达到 ±1,000,000,注意不要用 short。

(3)如果所有数都相同,那么最终结果应该是 0(因为没有比最大值小的数)。

---end---

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果有更好的方法也可以在评论区评论哦,我都会看哒~

我们下集见~

http://www.xdnf.cn/news/19404.html

相关文章:

  • PCB 局部厚铜工艺:技术升级与新兴场景应用,猎板加工亮点
  • 同步/异步日志库
  • 响应式编程框架Reactor【4】
  • Web 聊天室消息加解密方案详解
  • open webui源码分析13-模型管理
  • 数据结构--栈(Stack) 队列(Queue)
  • Python API接口实战指南:从入门到精通
  • Linux查看有线网卡和无线网卡详解
  • 【Linux】基础I/O和文件系统
  • 初学者如何学习项目管理
  • 计算机毕设javayit商城 基于SSM框架的校园二手交易全流程管理系统设计与实现 Java+MySQL的校园二手商品交易与供需对接平台开发
  • 【嵌入式原理系列-第六篇】从Flash到RAM:MCU ld脚本全解析
  • TuringComplete游戏攻略(一、基础逻辑电路)
  • Python Facebook Logo
  • 神经网络正则化三重奏:Weight Decay, Dropout, 和LayerNorm
  • ARM 裸机开发 知识点
  • 豌豆压缩怎么用?3步避免网盘资源被和谐 网盘压缩包总被和谐?豌豆压缩实测解析 豌豆压缩避坑指南:敏感资源存储必读
  • 雷卯国产化之SE3401完全替代AOS的AO3401
  • 数字签名 digital signature
  • 年化225%,回撤9%,夏普4.32,3积分可查看参数
  • Java 常见异常系列:ClassNotFoundException 类找不到
  • Java 学习笔记(基础篇12)
  • 学习Python中Selenium模块的基本用法(10:浏览器操作)
  • 让演化可编程:XLang 与可逆计算的结构化范式
  • [ZJCTF 2019]NiZhuanSiWei
  • 第2节:项目前期准备
  • C++抽象类
  • 【Python 后端框架】总结
  • Nginx反向代理与负载均衡
  • 基于单片机指纹考勤系统/智能考勤