题目链接:http://codeforces.com/contest/835/problem/B
题意:黑板上有一个数,你只知道这个数的每一位的和不小于k,现在有一个人不小心改动了这个数,把这个数变成n了,现在问你这个人从最初的数最少改变了几位数
解析:首先先把n的每一位数求和,如果大于等于k那么就是没有改变,如果小于他,那肯定是从位数最小的数开始改变,然后扫一遍即可
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
char a[maxn];
int main(void)
{
int k,sum = 0;
scanf("%d %s",&k,a);
int len = strlen(a);
sort(a,a+len);
for(int i=0;i<len;i++)
sum += a[i]-'0';
if(sum>=k)
puts("0");
else
{
int tmp = k-sum;
int cnt = 0,tt = 0;
for(int i=0;i<len;i++)
{
tt += a[i]-'0';
cnt++;
if(cnt*9-tt>=tmp)
break;
}
printf("%d\n",cnt);
}
return 0;
}

本文解析了一个CodeForces竞赛中的B级题目,该题目要求找出一个数被修改的最少位数,使得其各位数字之和不低于给定值k。通过输入一个整数n和k,算法计算并输出为满足条件所需的最小更改次数。

291

被折叠的 条评论
为什么被折叠?



