题意:黑板上有一个数,你只知道这个数的每一位的和不小于k,现在有一个人不小心改动了这个数,把这个数变成n了,现在问你这个人从最初的数最少改变了几位数
解析:首先先把n的每一位数求和,如果大于等于k输出0,如果小于他,那肯定是从位数最小的数开始改变,然后扫一遍即可
#include
#include
#include
using namespace std;
const int manx=100000;
int main()
{
long long k;
char n[manx];
cin>>k;
cin>>n;
int sum1=0;
int len = strlen(n);
sort(n,n+len); //按位数排序。
for(int i=0;i sum1+=n[i]-'0';
if(sum1>=k)
cout<<"0"< else
{
int sum2=0,cnt=0;
int temp=k-sum1;
for(int i=0;i {
sum2+=n[i]-'0';
cnt++;
if(cnt*9-sum2>=temp) //位数*9 -- 与之匹配的位数的和 >= 差
break;
}
cout< }
return 0;
}