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