HDU---2108

  题意:黑板上有一个数,你只知道这个数的每一位的和不小于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;
}

你可能感兴趣的:(HDU---2108)