【蓝桥杯选拔赛真题54】C++分糖果游戏 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解

本文主要是介绍【蓝桥杯选拔赛真题54】C++分糖果游戏 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

C++分糖果游戏

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、程序说明

五、运行结果

六、考点分析

七、推荐资料


C++分糖果游戏

第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题

一、题目要求

1、编程实现

现有N罐糖果,且已知每罐糖果的初始数量。现给出两个数值L和R(L,R),需要把每罐糖果的数量调整为:L≤任意一罐糖果的数量≤R。调整的方式是每次从其中一罐糖果中拿出1块放到其他糖果罐中。请你计算出最少调整几次才能使每罐糖果的数量都在L到R范围之间,如果不能将每罐糖果都调整到L到R范围之间则输出-1。
例如:N=2,2罐糖果的初始数量为3和8,L=3,R=6,通过调整使得:3≤任意一罐糖果的数量≤6,调整方式如下:

  • 第一次从初始数量为8的罐中拿1块放到初始数量为3的罐中,调整后为(4,7)
  • 第二次从数量7的罐中拿1块放到数量为4的罐中,调整后为(5,6)

故最少调整2次

2、输入输出

输入描述:第一行输入一个正整数N(N<30),表示糖果的罐数

第二行输入N个正整数(1≤正整数≤100),表示每糖果的初始数量,每个正整数之间以一个空格隔开

第三行输入两个正整数L,R(1≤LSR≤100),表示每糖果的数量所要调整的范围,两个正整数之间以一个空格隔开

输出描述:只有一行,一个整数,即输入的第二个整数。

输入样例:

2
3 8
3 6

输出样例:

2

二、算法分析

  1. 从给定题目的初步分析可以看出,有一定的难度,输入的数可以使用一维数组进行保存
  2. 接着其实可以对这个数组进行排序,只要每次比较数组中的第一个数是否比L小,以及数组中最后一个数是否比R大,如果是就将第一个加1,最后一个减1,进行一轮之后统计次数加1,再次继续刚才的步骤,直到数组中的每个数都在L和R之间,就输出统计次数
  3. 还有一种情况就是怎么调整都达不到要求,这种情况又有两种情况,一种是输入的所有数字之和都小于n*L,另外一种情况就是所有数字之和大于n*R;如果是这两种情况就输出-1

三、程序编写

#include<iostream>
#include<algorithm>
using namespace std;
int a[33];
int main()
{int n,l,r,cnt = 0,sum = 0;cin >> n;for(int i=0;i<n;i++){cin >> a[i];sum += a[i];}cin >> l >> r;if(sum < l * n || sum > r * n)cout << -1 << endl;else{sort(a,a+n);while(a[0]<l || a[n-1]>r){a[0] += 1;a[n-1] -= 1;cnt ++;sort(a,a+n);}cout << cnt << endl;}
}

四、程序说明

  1. 首先需要导入输入输出流头文件
  2. 接着导入算法头文件,为了后面使用sort函数
  3. 然后是引入std命名空间中的所有成员到当前的程序中,这样在当前的程序中就可以直接使用 std 命名空间中的所有成员,而不需要使用的时候在成员前面加上(std::)前缀
  4. 接着定义了一个整型数组a[33],用来存储输入的n个数字
  5. 接着是主函数入口声明5个变量:n(输入的个数),l(区间最小值),r(区间最大值),cnt(调整的次数),sum(输入数字之和)
  6. 接着输入n的值, 使用for循环输入n个数字,并累加它们的和
  7. 接着输入l和r的值, 判断数组a的总和是否满足要求,如果不满足则输出-1
  8. 如果满足要求,则对数组a进行排序; 使用循环判断数组a的最小值是否小于l,最大值是否大于r,如果满足条件则跳出循环
  9. 如果不满足条件,则将数组a的第一个元素加1,最后一个元素减1,并对数组a进行排序, 每次循环结束后,计数器cnt加1
  10. 最终输出计数器的值,即为满足条件的最小次数
  11. 最后利用输出流对象cout,输出最小次数
  12. 最后返回0,程序结束

 本文作者:小兔子编程 作者首页:https://blog.csdn.net/frank2102

五、运行结果

2
3 8
3 62

六、考点分析

难度级别:中等,这题相对而言还是比较简单的,具体主要考查如下:

  1. 充分掌握变量的定义和使用
  2. 掌握一维数组的定义和相关使用
  3. 学会输入流对象cin的使用,从键盘读入相应的数据
  4. 学会for循环的使用,在确定循环次数的时候推荐使用学会
  5. 学会while循环的使用,在不确定循环次数的时候推荐使用
  6. 学会if条件判断语句的使用,满足一定条件才能执行后面的语句
  7. 学会if...else...双分支语句的使用,条件满足执行一种处理,不满足执行另一种处理
  8. 学会sort函数的使用,对数组进行从小到达排序
  9. 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  10. 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
  11. 充分掌握变量定义和使用、分支语句、循环语句和简单算法知识的使用及输入输出的用法

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

七、推荐资料

  • 所有考级比赛学习相关资料合集【推荐收藏】

这篇关于【蓝桥杯选拔赛真题54】C++分糖果游戏 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

C++读写word文档(.docx)DuckX库的使用详解

《C++读写word文档(.docx)DuckX库的使用详解》DuckX是C++库,用于创建/编辑.docx文件,支持读取文档、添加段落/片段、编辑表格,解决中文乱码需更改编码方案,进阶功能含文本替换... 目录一、基本用法1. 读取文档3. 添加段落4. 添加片段3. 编辑表格二、进阶用法1. 文本替换2

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键