有坑点,因为这个m可能超出给定的1000范围(硬币大小均小于500),所以hash的数组要开大一点,否则将会在第三个测试点中不通过,不知道为什么是答案错误不是段错误,其他的就没有坑点啦
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=110000;
int main()
{
int n,m;
cin>>n>>m;
int a[maxn],hashnum[3001]={0};
for (int i=0;i<n;i++)
{
scanf("%d",&a[i]);
hashnum[a[i]]++;
}
int flag=false;
for (int i=m-1;i>=m/2;i--)
{
if (hashnum[i]!=0)
{
hashnum[i]--;
if(hashnum[m-i]!=0)
{
printf("%d %d",m-i,i);
flag=true;
break;
}
}
}
if (flag==false)
printf("No Solution");
}
解决硬币组合问题的C++代码
本文介绍了一个使用C++编写的解决方案,旨在找到两枚硬币组合成特定金额的方法。代码考虑了硬币大小限制,并通过哈希数组记录每种面额的硬币数量,最终输出满足条件的硬币组合,若无解则返回'No Solution'。
355

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



