剩余银饰的重量(C语言)

2024-02-21 15:04
文章标签 语言 重量 剩余 银饰

本文主要是介绍剩余银饰的重量(C语言),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

N 块二手市场收集的银饰,每块银饰的重量都是正整数,收集到的银饰会被熔化用于打造新的饰品。 每一回合,从中选出三块 最重的 银饰,然后一起熔掉。假设银饰的重量分别为 xyz,且 x <= y <= z。那么熔掉的可能结果如下:

  • 如果x == y == z,那么三块银饰都会被完全熔掉;
  • 如果x == yy != z,会剩余重量为z - y的银块无法被熔掉;
  • 如果x != yy == z,会剩余重量为y - x的银块无法被熔掉;
  • 如果x != yy != z,会剩余重量为z - yy - x差值的银块无法被熔掉。

如果剩余两块,返回较大的重量(若两块重量相同,返回任意一块皆可);如果只剩下一块,返回该块的重量;如果没有剩下,就返回 0

输入描述

输入数据为两行

第一行为银饰数组长度 n1 ≤ n ≤ 40

第二行为 n 块银饰的重量,重量的取值范围为[1,2000],重量之间使用空格隔开

输出描述

如果剩余两块,返回较大的重量(若两块重量相同,返回任意一块皆可);如果只剩下一块,返回该块的重量;如果没有剩下,就返回 0

示例一

输入

3
1 1 1
12

输出

0
1

说明

选出 1 1 1,得到 0,最终数组转换为 [],最后没有剩下银块,返回 0

示例二

输入

3
3 7 10
12

输出

1
1

说明

选出 3 7 10,需要计算 (7-3)(10-7) 的差值,即(7-3)-(10-7)=1,所以数组转换为 [1],剩余一块,返回该块重量,返回 1

思路

  1. 读取输入

    • 首先,从标准输入中读取银饰的数量 n
    • 然后,用一个数组 weight[] 存储每块银饰的重量,通过循环读取并存储。
  2. 排序银饰重量

    • 使用 C 语言内置的 qsort 函数对 weight[] 数组进行降序排列,这样每次都能直接获取最重的三块银饰。
  3. 熔炼逻辑

    • 当银饰数量大于等于3时,进入熔炼循环。
      • 在每一次循环中,取出当前最重的三块银饰(下标为 0、1、2 的元素)。
      • 根据题目给出的熔炼规则计算可能剩余的银块重量,并将结果存储到变量 piece 中。
      • 如果没有剩余(piece == 0),则继续下一轮循环;否则,将剩余重量 piece 加入数组,并更新当前银饰数量 n,然后重新对数组进行排序。
  4. 处理剩余银饰

    • 循环结束后,根据剩余银饰的数量决定输出结果:
      • 如果没有剩余银饰(n == 0),输出 0
      • 如果只剩一块银饰(n == 1),输出该块银饰的重量(输出weight[0]);
      • 如果剩余两块银饰(n == 2),比较这两块的重量并输出较大的那个重量(输出weight[0])。

代码

#include <stdio.h>
#include <stdlib.h>// 定义一个比较函数,用于对银饰重量进行降序排序
int cmp(const void *a, const void *b) {return *(int *)b - *(int *)a; // 按照从大到小的顺序排列
}// 计算熔炼后可能剩余的银块重量
int res(int x, int y, int z) {if (x == y && y == z)return 0; // 如果三块重量相等,则完全熔化无剩余if (x == y && y != z)return z - y;// 如果两块较轻的重量相等,则剩余较重的一块减去较轻的一块重量if (x != y && y == z)return y - x;// 如果中间和最重的重量相等,则剩余中间的减去最轻的一块重量if (x != y && y != z)return abs((z - y) - (y - x));// 如果三块重量都不相等,则计算两者差值的绝对值作为剩余重量
}int main() {int n;scanf("%d", &n); // 输入银饰的数量// 初始化银饰重量数组int weight[n];for (int i = 0; i < n; i++) {scanf("%d", &weight[i]); // 输入每一块银饰的重量}// 对银饰重量数组进行降序排序qsort(weight, n, sizeof(int), cmp);// 当银饰数量大于等于3时,持续熔炼while (n >= 3) {// 获取当前最重的三块银饰重量int x = weight[2];int y = weight[1];int z = weight[0];// 移除已熔炼的三块银饰,并将剩余银饰向前移动for (int i = 0; i < n - 3; i++) {weight[i] = weight[i + 3];}n -= 3;// 计算此次熔炼后的剩余重量,并将其加入数组(若有剩余)int piece = res(x, y, z);if (piece == 0)continue;else {weight[n++] = piece;qsort(weight, n, sizeof(int), cmp); // 再次对剩余银饰进行降序排序}}// 根据最终剩余的银饰数量输出结果if (n == 0) {printf("0\n"); // 若没有剩余则输出0} else {printf("%d\n", weight[0]); // 否则输出剩余银饰的重量(数组中的最大值)}return 0;
}

文章目录

    • 题目描述
    • 输入描述
    • 输出描述
    • 示例一
    • 示例二
    • 思路
    • 代码

这篇关于剩余银饰的重量(C语言)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/732173

相关文章

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、