题目描述
有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;
}


京公网安备 11010502036488号