原题链接
题意
思路
1.一开始做的想法是错误的,然后wa了好几次,最后看样例才ac了
2.我们知道,最多也就操作3次,每次操作的最大程度只能是将 这个数变为9或者0,这样才能是我们的结果最优化
3.分情况,假设前三个数的和为sum1,后三个数的和为sum2sum1>sum2 : 前面的数字要变小,后面的数字要变大,才能的到最终的结果,
所以我们让前三个数变到0,后三个数变到9,将其最大化利益放入新数组之后排序,当sum1-sum2不为0时,每次取最大利益进行计算
sum2>sum1 : 同理,前三个数需要变大,后三个数需要变小
4.如果还不理解,可以自己举个例子,进行模拟
AC 代码
#include<bits/stdc++.h>using namespace std;string s;
int a[3], b[3];
int cun1[6],cun2[6];int cmp(int a,int b){return a>b;
}int main() {cin >> s;int sum1 = 0;int sum2 = 0;for (int i = 0; i < 3; i++) {sum1 += s[i] - '0';a[i] = s[i] - '0';sum2 += s[i + 3] - '0';b[i] = s[i + 3] - '0';}int cha = abs(sum1 - sum2);if (sum2 > sum1) {int index=0;for(int i=0;i<3;i++){ //将前三个数变为0cun1[i]=b[i];}for(int i=0;i<3;i++){ //将后三数变为9cun1[i+3]=9-a[i]; }sort(cun1,cun1+6,cmp); //从小到达排序int res=0;while (cha>0){ //每次取最大化利益cha-=cun1[res++];}cout<<res<<endl;} else if (sum2 < sum1) { //同上int index=0;for(int i=0;i<3;i++){cun2[i]=a[i];}for(int i=0;i<3;i++){cun2[i+3]=9-b[i];}sort(cun2,cun2+6,cmp);int res=0;while (cha>0){cha-=cun2[res++];}cout<<res<<endl;} else {cout << 0 << endl;}return 0;
}