看运气抽签啦!

这是一道很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、如果改改题意:每次抽取的纸片不放回且所有元素都不可能相同,那么又该怎样处理?((*^__^*) 嘻嘻……先留给大家思考啦,后面再给讲解!)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值