Saber吃苹果,保持每箱苹果数量递增

Saber面临一个苹果排列问题,她希望保持每箱苹果数量递增,同时消耗最少的苹果。题目描述指出,Saber有n箱苹果,每箱有特定数量,需要保证所有箱子不空且数量递增。通过分析,解决方案是从未尾箱开始,若前一箱比后一箱多,减少前一箱使其等于后一箱减1,记录减少的苹果数。如果无法满足条件则输出-1。提供了一个C++的解题思路。
摘要由CSDN通过智能技术生成

【题目描述】Saber喜欢吃苹果。现在Saber有n箱苹果。第一个箱子里有a1个苹果,第二箱有a2个,第三箱有a3个一直到an。Saber是个吃货,但也是个爱美的女生。n箱苹果需要满足下面的条件才会看起来更好看:第一点就是每个箱子都不能空。第二点就是苹果数量应该是递增的。也就是说,第一个箱子的苹果数少于第二个箱子,第二箱的苹果少于第三箱,第三箱少于第四箱,依此类推。Saber今天有些饱,所以想通过吃尽量少的苹果同时满足以上两个要求而使箱子看上去更美。请你输出Saber吃掉的最少的苹果数量。如果她无法完成心愿就输出-1吧。
【输入格式】两行第一行一个整数n,表示有n箱苹果第二行n个整数,表示每一箱里面苹果的数量
【输出格式】一行一个整数,-1表示不能实现,正整数表示要吃掉的最少苹果数量。

问题分析:要满足递增条件,只能减少元素值,且要减少的最少,那么关键点是:最后一箱的数量是不动的,否则就不是减少的最少。然后以最后一箱为基准,如果前面一箱数量多余后面箱的数量,则将该箱数量减为后面一箱数量减去1,得到差值即为要吃掉的苹果树。如此类推完成所有箱的处理即可。

C++

#include <iostream>
using namespace std;
int main()
{
    int a[1000];
    int n,i,count=0,d=0;
    cin>>n;
    for(i=0;i<n;i++)
      cin>>a[i];
    for(i=n-1;i>0;i--)
    {
        if(a[i-1] >= a[i])
        {
            d &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值