您的位置:首页 > 理论基础 > 数据结构算法

看运气抽签啦!

2016-03-17 17:48 281 查看
这是一道很easy的题啦!不过可以引发很多思考耶,一开始还差点被这道题吓住了,不过还好,每一次抽取的纸片都放回了的,并且抽取次数很少,限制条件的范围也比较小,所以直接枚举啦!多的不说,看题!



#include<stdio.h>
int main()
{
int i,n,m,j,k,l,flag;
int a[55];
while(scanf("%d%d",&n,&m)!=EOF)
{
flag=0;  //标识是否找到
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
for(l=0;l<n;l++)
if(a[i]+a[j]+a[k]+a[l]==m)
{
flag=1;
break;//找到方案就跳出循环
}
}
if(flag)
break;//继续跳出
}
if(flag)
break;//继续跳出
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}


思考:

1、当n足够大时,显然四重循环不是最优的,要超时(测试通不过),因此还需寻找高效算法(后面会讲)。

2、如果改改题意:每次抽取的纸片不放回且所有元素都不可能相同,那么又该怎样处理?((*^__^*) 嘻嘻……先留给大家思考啦,后面再给讲解!)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息