洛谷C++简单题小练习day8—Bookshelf B

day8--Bookshelf B--1.30

习题概述

题目描述

Farmer John 最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了。现在,只有书架的顶上还留有一点空间。

所有(1≤N≤20,000) N头奶牛都有一个确定的身高Hi​(1≤Hi​≤10,000)。设所有奶牛身高的和为S书架的高度为B,并且保证1≤B≤S<2,000,000,007。

为了够到比最高的那头奶牛还要高的书架顶,奶牛们不得不像演杂技一般,一头站在另一头的背上,叠成一座“奶牛塔”。当然,这个塔的高度,就是塔中所有奶牛的身高之和。为了往书架顶上放东西,所有奶牛的身高和必须不小于书架的高度。

显然,塔中的奶牛数目越多,整座塔就越不稳定,于是奶牛们希望在能够到书架顶的前提下,让塔中奶牛的数目尽量少(身高 高的先上)。 现在,奶牛们找到了你,希望你帮她们计算这个最小的数目。

输入格式

     第 1 行: 2 个用空格隔开的整数:N 和 B;

     第 2…N+1 行: 第 i+1 行是 1 个整数:Hi​。

输出格式

      第 1行: 输出 1个整数,即最少要多少头奶牛叠成塔,才能够到书架顶部。

代码部分

#include<bits/stdc++.h>
using namespace std;
int high[20005];//数组high 存储奶牛身高 
bool cmp(int a,int b)//自定义比较函数从大到小
{return a>b;
}
int main()
{int n,b;//n表示奶牛数量,b表示书架高度 cin>>n>>b;for(int i=0;i<n;i++)//循环读取每头奶牛的身高 {cin>>high[i];}sort(high,high+n,cmp);//sort变为从大到小排序 int sum=0,ans=0;//表示当前奶牛塔的总高度和塔中奶牛的数量 while(sum<b)//只要高度不够就继续叠{sum+=high[ans];ans++;}cout<<ans;return 0;
}

心得体会

1.这个习题要求计算最少需要多少头奶牛才能够使它们的身高之和达到或超过给定的书架高度。

解决这个问题的思路:先将奶牛的身高从大到小进行排序,然后从最高的奶牛开始累加身高,直到累加的身高达到或超过书架的高度。通过计数器记录累加的奶牛数量,最后输出计数器的值即为最少所需的奶牛数量。

2.在C++标准库中,sort函数默认是按升序进行排序的。但本题需要按照奶牛的身高从大到小进行排序,以便从最高的奶牛开始叠加身高按降序排序,所以使用sort函数结合自定义的比较函数cmp来实现。

3.如果不想使用自定义函数那么需要有几处修改为

sort(high, high + n);   

sum += high[n - 1 - ans]; ans++;

解释:

sum += high[n - 1 - ans] 的语句时,在每次循环中将数组 high 中的最后一个元素(即最大的身高,此时是利用sort所排的升序)添加到 sum 中。n 是奶牛的数量,而 ans 是一个计数器,表示已经叠加的奶牛的数量。

为了从最高的奶牛开始叠加身高,因为数组 high 在经过排序后最后一个元素(即 high[n - 1])代表的是最大的身高。所以 n - 1 - ans 来访问数组 high 的最后一个元素。

ans++ 会将计数器 ans 的值增加 1,以便在下一轮循环中继续叠加下一个身高。


下面是更改后的代码:(代码看似简单,但需要仔细考虑)

#include<bits/stdc++.h>
using namespace std;
int high[20005];  // 数组high 存储奶牛身高
int main()
{int n, b;  // n表示奶牛数量,b表示书架高度cin >> n >> b;for(int i = 0; i < n; i++)  // 循环读取每头奶牛的身高{cin >> high[i];}sort(high, high + n);  // sort默认升序排序int sum = 0, ans = 0;while(sum < b)  // 只要高度不够就继续叠{sum += high[n - ans - 1];ans++;}cout << ans;return 0;
}

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

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

相关文章

python爬虫概念及介绍

1. 什么是互联网爬虫&#xff1f; 解释 1 &#xff1a;通过一个程序&#xff0c;根据 Url ( http : // www . taobao . com ) 进行爬取网页&#xff0c;获取有用信息 解释 2&#xff1a;使用程序模拟浏览器&#xff0c;去向服务器发送请求&#xff0c;获取响应信息 2. 爬虫核…

JAVAEE初阶 网络编程(八)

IP协议 认识IP协议 在认识IP协议之前&#xff0c;我们首先要明确IP协议的工作范围或者是用途。 &#xff08;1&#xff09; 地址管理&#xff1a;使用一套地址体系&#xff0c;来描述互联网上各个设备所处的为止。 &#xff08;2&#xff09; 路由选择&#xff1a;数据包如何从…

@Test Annotation属性– enabled attribute

目录 而不使用enabled属性 现在&#xff0c;使用enabled属性 我们可以使用enabled属性来忽略类中的所有情况吗&#xff1f; Test注解有很多属性&#xff0c;enabled也是其中之一。在这篇文章中&#xff0c;我们将详细讨论enabled属性。 enabled属性有什么作用&#xff1f;当…

延伸与应用(三)婚姻与经济、运动、宗教、科技与经济

53&#xff0e;幸福婚姻的经济ABC方程式 夫以信先其妇&#xff0c;则妇以信顺其夫。上秉常以化下&#xff0c;下服常而应上&#xff0c;其不化者&#xff0c;百未有一也。 ——《傅子》&#xff0c;傅玄&#xff08;217—278&#xff09; 在现代的小家庭中&#xff0c;由于家庭…

Linux ssh 无法登录的情况记录

这篇主要记录一些工作中碰到过的&#xff0c;有一些记录意思的案例 情况一&#xff1a;库文件被改动 问题描述 发现测试环境&#xff08;Rhel6.4&#xff09;账号无法登陆&#xff0c;密码正确时无响应&#xff0c;错误时提示错误&#xff0c;控制台进入后发现有如下报错 ER…

Cesium 实战 - 加载 GeoJson 混合几何类型数据(同时包含 MultiPolygon 和 MultiLinestring),不能加载的问题

Cesium 实战 - 加载 GeoJson 混合几何类型数据(同时包含 MultiPolygon 和 MultiLinestring),不能加载的问题 复现问题完整代码:在线示例在之前的项目中,偶然遇到个气泡的问题:GeoJson 同时包含 MultiPolygon 和 MultiLinestring,并且数量比较大的时候,MultiLinestring …

Linux实验记录:远程控制服务

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注&#xff1a; SSH&#xff08;Secure Shell&…

安卓11修改HDMI自适应分辨率

客户需要hdmi自适应屏幕分辨率&#xff0c;没发现有相关的指令&#xff0c;我发现设置中有个hdmi的Auto选项&#xff0c;于是就试试选中这个选项&#xff0c;试下了可以自适应&#xff0c;于是就找到相关代码&#xff0c;在开机完成后执行这个代码&#xff0c;基本满足需求&…

数据中心IP代理是什么?有何优缺点?海外代理IP全解

海外代理IP中&#xff0c;数据中心代理IP是很热门的选择。这些代理服务器为用户分配不属于 ISP&#xff08;互联网服务提供商&#xff09;且来自第三方云服务提供商的 IP 地址&#xff0c;是分配给位于数据中心的服务器的 IP 地址&#xff0c;通常由托管和云公司拥有。 这些 I…

热仿真中稳态与瞬态的区别

对于热仿真&#xff0c;根据是否随时间变化&#xff0c;可分为稳态&#xff08;steady&#xff09;仿真和瞬态&#xff08;transient&#xff09;仿真两类。 从数学计算的角度&#xff0c;所谓稳态是指物理量不随时间变化的定常过程&#xff0c;即计算域中所有物理量均满足关系…

vue前端页面时间显示问题解决方法

解决方法&#xff0c; <template slot-scope"scope"><span>{{ parseTime(scope.row.boxClosingOnlineTime, {y}-{m}-{d} {h}:{i}:{s}) }}</span> </template> 刷新页面&#xff1a; 此外&#xff0c;使用JsonFormat(pattern "yyyy-M…

JavaEE UDP协议

JavaEE UDP协议 在之前的文章中有对UDP协议套接字的使用进行讲解&#xff0c;本文主要对UDP协议进行一些理论补充。 文章目录 JavaEE UDP协议1. 概念2. UDP协议格式2.1 数据报长度2.2 校验和/检验和2.2.1 CRC校验2.2.2 MD5算法 1. 概念 UDP&#xff0c;即User Datagram Proto…

【PyRestTest】高级使用

本节主要涉及PyRestTest的高级特征的详细使用,主要指:generators(生成器), variable binding(变量绑定), data extraction(数据提取), content validators(文本验证) 它们是如何组合在一起的? 模板和上下文 测试和基准测试可以使用变量来模板化动态配置。使用基础的…

【Java程序设计】【C00172】基于SSM的老年人健康管理系统(论文+PPT)

基于SSM的老年人健康管理系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的老年人健康管理系统 本系统分为前台、管理员以及用户3个功能模块。 前台&#xff1a;当游客打开系统的网址后&#xff0c;首先看到的就是首…

【前端-VUE+TS】Vue3组件化-知识补充(六)

一. 动态组件 比如我们现在想要实现了一个功能&#xff1a; 点击一个tab-bar&#xff0c;切换不同的组件显示&#xff1b; 案例截图 这个案例我们可以通过两种不同的实现思路来实现&#xff1a; 方式一&#xff1a;通过v-if来判断&#xff0c;显示不同的组件&#xff1b;方式二…

【开源学习】TB-gateway -- 基本配置与使用

【开源学习】TB-gateway -- 基本配置与使用 tb-gateway 安装部署centOS 7 安装&#xff08;不推荐&#xff09;Docker 安装&#xff08;推荐&#xff09; tb-gateway 通用配置文件连接配置模块 thingsboard存储配置模块 storage远程调用配置模块 grpc连接器配置模块 connectors…

C++核心

4.2对象的初始化 生活中我们买的电子产品都基本会有出厂设置&#xff0c;在某一天我们不用时候也会删除一些自己信息数据保证安全 C中的面向对象来源于生活&#xff0c;每个对象也会有初始设置以及 对象销毁前的清理数据的设置 4.2.1构造函数和析构函数 对象的初始化和清理…

数据恢复之道:DevicData-P-XXXXXXXX勒索病毒的预防与恢复攻略

尊敬的读者&#xff1a; 随着科技的发展&#xff0c;网络安全问题愈发突出&#xff0c;而勒索病毒作为其中的一种恶意软件&#xff0c;正不断演进成为威胁用户数据安全的严重问题。本文将深入介绍.DevicData-P-XXXXXXXX勒索病毒的特征&#xff0c;提供被感染文件的恢复方法&am…

os.environ函数用法

os.environ 是 Python 中 os 模块提供的一个字典&#xff0c;它表示当前系统的环境变量。环境变量是在操作系统级别设置的键值对&#xff0c;用于配置系统行为和提供信息给正在运行的进程。 os.environ 的基本用法包括获取和设置环境变量的值。下面是一些基本的使用示例&#…

jupyter python笔记杂乱

问题产生的原因: 无法执行sess.run()的原因是tensorflow版本不同导致的&#xff0c;tensorflow版本2.0无法兼容版本1.0 解决办法: tf.compat.v1.disable_eager_execution() 确保tf’2能运行tf1的代码 notebok打开指定文件夹 直接解决