题目描述
有n堆石头排成一排,标号为0到n-1,第i堆石头有a[i]个石头
每一步你可以从某一堆取一个石头放到相邻的石头堆里
请问需要多少步可以将a数组变成b数组

输入描述:
第一行先输入一个整数n (1 ≤ ≤ 50)
第二行输入n个数ai
第三行输入n个数bi
0 ≤ ai, bi ≤ 106

输出描述:
输出一个整数表示最少的操作步数,如果无法将a数组变成b数组,输出-1

题目分析:
其实这道题只是分两步,还是很好理解的,输入完了之后先判断是否可以,即将a的数值全部加起来,b的数值全部加起来,看是否相等。
第二步,相邻两个数之间进行判断,如果不相等,则按照下面代码进行操作。

欢迎大家积极问问题,如有错误也可提出来,作者感激不尽,最后不要忘记给作者点个赞哦!

#include <cstdio>
#include <iostream>
using namespace std;
int a[55],b[55];
int main ()
{
    int n,c,sum=0;
    cin >> n;
    for (int i=1;i<=n;i++)
    {
        cin >> a[i];
    }
    for (int i=1;i<=n;i++)
    {
        cin >> b[i];
    }

    int s=0;

    for (int i=1;i<=n;i++)
    {
        s=s+a[i]-b[i];
    }
    if(s!=0)
    {
        cout << "-1" << endl;
        return 0;
    }

    for (int i=1;i<=n;i++)
    {
        if(a[i]>=b[i])
        {
            c=a[i]-b[i];
            sum+=c;
            b[i+1]=b[i+1]-c;
        }
        else
        {
            c=b[i]-a[i];
            sum+=c;
            a[i+1]=a[i+1]-c;
        }
    }

    cout << sum << endl;
    return 0;
}