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

去重求和(最大N个数和最小N个数的和)(C 语言)

题目

给定一个数组,编写一个函数,
计算他的最大N个数和最小N个数的和,
需要对数组进行去重。

输入

第一行输入MM表示数组大小
第二行输入M个数,表示数组内容
第三行输入N表示需要计算的最大最小N的个数

输出

输出最大N个数和最小N个数的和

示例一

输入
5
95 88 83 64 100
2
输出
342
说明

最大2个数[100 95]最小 2 个数[83 64]
输出342

示例二

输入
5
3 2 3 4 2
2
输出
-1
说明

最大2个数是[4 3]最小2个数是[3 2]
有重叠输出为-1

思路

解题思路如下:

  1. 读取输入

    • 首先,程序读取数组的大小 M
    • 然后,依次读取并存储数组中的 M 个整数到动态数组 nums 中。
    • 接着,读取需要计算的最大最小数的数量 N
  2. 排序数组

    • 使用 qsort 函数对数组进行降序排序,以便后续可以快速找到最大和最小的数。
  3. 数组去重

    • 遍历已排序的数组,当遇到重复元素时,将其从数组中移除。通过更新数组长度来保持有效数据范围。
  4. 计算结果

    • 初始化结果变量 res-1,表示存在重复数字的情况下的输出结果。
    • 检查经过去重处理后的数组长度是否大于等于 2 * N。如果满足条件,则将结果初始化为 0 并重新计算。
    • 遍历数组,将位于数组两端(前 N 个和后 N 个)的数累加到结果变量 res 中。
  5. 输出结果

    • 输出最终计算得到的最大 N 个数和最小 N 个数的和。

代码

#include <stdio.h>
#include <stdlib.h>// 定义一个比较函数,用于对整数数组进行降序排序
int cmp(const void *a, const void *b) {return *(int *)b - *(int *)a; // 返回 b - a 的值,实现降序排列
}int main() {int length;scanf("%d", &length); // 读取数组长度 M// 初始化动态数组 nums,用于存储输入的整数int nums[length];for (int i = 0; i < length; i++) {scanf("%d", &nums[i]); // 读取数组中的每个元素}int n;scanf("%d", &n); // 读取需要计算的最大最小 N 的个数// 使用 qsort 函数对数组进行降序排序qsort(nums, length, sizeof(int), cmp);// 对排序后的数组进行去重操作for (int i = 0; i < length - 1;) {if (nums[i] == nums[i + 1]) { // 如果当前元素与下一个元素相等(即重复)// 将重复元素移除并将后续元素前移for (int j = i; j < length - 1; j++)nums[j] = nums[j + 1];length--; // 数组有效长度减一} else {i++; // 若无重复,则继续检查下一个元素}}// 计算去重后数组中最大 N 个数和最小 N 个数的和int res = -1; // 初始化结果为 -1,表示有重复时的结果if (n * 2 <= length) { // 如果要去重后数组长度大于等于 2Nres = 0;           // res置0,开始累加// 遍历数组,将前 N 个和后 N 个数累加到结果中for (int i = 0; i < length; i++) {if (i < n || i >= length - n) {res += nums[i];}}}printf("%d\n", res); // 输出最大 N 个数和最小 N 个数的和return 0;
}

文章目录

      • 题目
      • 输入
      • 输出
      • 示例一
        • 输入
        • 输出
        • 说明
      • 示例二
        • 输入
        • 输出
        • 说明
    • 思路
    • 代码

相关文章:

  • LINUX rpm离线包下载办法
  • 设计模式学习笔记 - 面向对象 - 6.为什么要基于接口而非实现编程?有必要为每个类都定义接口吗?
  • PD协议取电芯片:支持多协议小体积外围支持配置输出不同电压
  • 目标检测-Transformer-ViT和DETR
  • 备战蓝桥杯—— 双指针技巧巧答链表1
  • Leetcoder Day17| 二叉树 part06
  • 如何将实景三维倾斜模型叠加到三维地球上?
  • AMRT3D数字孪生引擎详解
  • DataX学习详解
  • 【笔记】【开发方案】APN 配置参数 bitmask 数据转换(Android KaiOS)
  • 数字热潮:iGaming 能否推动加密货币的普及?
  • 【LeetCode-337】打家劫舍III(动态规划)
  • vivado FSM Components
  • 云HIS系统源码,基于云计算技术的B/S架构的云HIS系统,二甲医院信息管理系统
  • 【Ubuntu】Anaconda的安装和使用
  • hexo+github搭建个人博客
  • python3.6+scrapy+mysql 爬虫实战
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • DataBase in Android
  • ES6核心特性
  • Java的Interrupt与线程中断
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • spring security oauth2 password授权模式
  • 简单基于spring的redis配置(单机和集群模式)
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 入门级的git使用指北
  • 深入浏览器事件循环的本质
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一起参Ember.js讨论、问答社区。
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 与 ConTeXt MkIV 官方文档的接驳
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (4)Elastix图像配准:3D图像
  • (MATLAB)第五章-矩阵运算
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (七)Java对象在Hibernate持久化层的状态
  • (十五)使用Nexus创建Maven私服
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)Neo4j下载安装以及初次使用
  • .net CHARTING图表控件下载地址
  • .NetCore部署微服务(二)
  • @Autowired多个相同类型bean装配问题
  • @EventListener注解使用说明
  • @KafkaListener注解详解(一)| 常用参数详解
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [BZOJ3757] 苹果树
  • [C#]使用PaddleInference图片旋转四种角度检测
  • [codevs1288] 埃及分数
  • [HDU 3555] Bomb [数位DP]
  • [Java]快速入门二叉树,手撕相关面试题