猜数(C++)

链接:https://ac.nowcoder.com/acm/contest/5389/B
来源:牛客网

题目描述

纸上写了 n 个数字,牛牛在之前改动了几个数字,他忘了他具体改了些数字了。

但是他记得动之前这些数字的和是 ≥m 的,求他最少改动几个数字。

注意:这些数字在改之前和改之后均在 0 ~ 9 之间,且为整数。

输入描述:

第一行给出 n,m

第二行给出 n 个 0 ~ 9 的整数

输出描述:

输出最少改动了几个数字。(保证答案 ≤n)

示例1

输入

2 3
1 1

输出

1

备注:

对于 50  %数据有 n≤20

对于 100  %数据有 n≤10^6




思想:贪心。

我的思路:首先sort一下,排完序后从最小的数字开始,从小到大变成9,知道和大于m的值。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,sum=0,ans=0;
int a[1000001];
int main() {
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
    	scanf("%d",&a[i]);
    	sum+=a[i];
	}
	if(sum>=m)
	{
		printf("%d\n",ans);
		return 0;
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n+1;i++)
	{	sum=sum+9-a[i];
		if(sum>=m)
		{
			printf("%d\n",ans+1);
			return 0;
		}
		else
		{
			ans++;
		}
	}

    return 0;
}
原创文章 75 获赞 126 访问量 1万+

猜你喜欢

转载自blog.csdn.net/liuzich/article/details/105887990