CF-845B
题意:
对于给出的长度为6的整数串,求最小改变多少个整数可以使前三个数之和等于后三个数。
起初直接暴力写太复杂了,可以先求出前后的和s1,s2 。将较小的一边三个数变为9-a[i],即将它们全部变为9时差值的变化量,而后排序,从大到小减差值直到差值不大于0即可。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int a[10]; 5 6 int main(){ 7 ios::sync_with_stdio(false); 8 string s; 9 cin>>s; 10 int s1=0,s2=0; 11 for(int i=0;i<3;i++){ 12 a[i]=s[i]-'0'; 13 s1+=a[i]; 14 } 15 for(int i=3;i<6;i++){ 16 a[i]=s[i]-'0'; 17 s2+=a[i]; 18 } 19 int num=s1-s2; 20 if(num>0){ 21 for(int i=3;i<6;i++){ 22 a[i]=9-a[i]; 23 } 24 } 25 else{ 26 for(int i=0;i<3;i++){ 27 a[i]=9-a[i]; 28 } 29 num=-num; 30 } 31 sort(a,a+6); 32 for(int i=5;i>0;i--){ 33 if(num<=0){ 34 cout<<5-i<<endl; 35 break; 36 } 37 num-=a[i]; 38 } 39 return 0; 40 }