原题链接
题意
思路
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++){ //将前三个数变为0
cun1[i]=b[i];
}
for(int i=0;i<3;i++){ //将后三数变为9
cun1[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;
}