腾讯2019暑期提前批笔试题1——硬币

题目:

找不到题目的链接了,在牛客看到有人截图下来了,就直接用了

思路:

这道题刚看到的时候可能会想一下在学动态规划的时候做过的那道题,用不同面额的硬币去匹配某一固定的金额,以求使用硬币数目最小。但是这道题仔细看题会发现,硬币的面额从1到n是连续的,而且数目视为无限制,所以这里可以放心大胆地使用贪心的思想进行求解。

具体的想法是这样的:使用一个变量sum来保存使用的硬币数目,如果m目前大于n那么sum直接增加m/n,并且将m更新为m%n,如果m小于n那么证明我们这时候一定 可以找到一枚硬币直接匹配m,这时候sum增加1就可以了,至于笔试完听到有的人说用什么复杂的算法个人感觉是没必要的,基于这种想法,代码很少而且通过了全部样例

代码:

#include <iostream>
using namespace std;
int main()
{
	int n,m;//最大面额和金额 
	cin>>n>>m;
	int sum=0;
	while(m)
	{
		if(m>=n)
		{
			sum+=m/n;
			m=m%n;
		}
		else
		{
			sum+=1;
			m=0;
		}
	}
	cout<<sum<<endl;
 } 

猜你喜欢

转载自blog.csdn.net/LieberVater/article/details/88376080