枚举-算法

枚举

求解策略:
	它是基于已有知识进行的一种答案猜测的一类问题思想

例如:求小于N的最大素数

有以下一个问题:
1.找不到一个数学公式,直接就去求出最大小于N的最大素数。

2.我们可以这样思考:N-1是素数吗? N-2是素数吗? ......一直到找到这个数为止,(这个过程我们在不断的猜想,不断 地将每一种情况考虑,这就是枚举的策略)假设这个数是N-k;

3.在上面的过程中又需要思考一个问题问题:

N-K是素数的条件(也就是我们是怎么知道N-K是素数的,N-k这个数就是根据我们自己已经掌握的知识进行筛选出来的结果:):

大于2小于根号(N-K)的数都不能被整除的数就是素数;

解决办法

1.从N这个数开始判断是不是素数;根据素数的条件判断;

2.如果是就输出这个值;不是,就将这个数减1,再重复上面的操作;

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int N = 100;//假设N是100
    N = N-1;//保证N是小于100的数;
    while(N>=1){
		int flag = 1;//一开始假设就是标记是素数
	if(N%2 == 0)//可以根据自己的知识提前判断是不是素数(偶数一定不是素数)
	    {
	        N = N-1;
		 continue;
		}
       
        for(int i = 2;i<sqrt(N);i++){
            if(N%i == 0)
                {
                flag = 0;//标记不是素数;
		 break;
                }
        }
        if(flag == 1)
            {cout <<N<<endl;break;}
        N = N-1;
    }






枚举的思想: 猜测

枚举

从可能的集合中一 一列举各元素
根据所知道的知识,给每一个猜测的答案判断是不是所需;

枚举过程

判断猜测的答案是否正确

N-1是小于N的最大素数吗?

进行的猜测时,猜测的结果必须是已经进行判断是不是素数

猜测的过程中要及早排除错误的答案.如: 只有奇数才可能是素数

枚举中三个关键问题

问题一

给出解空间,建立简洁的数学模型



问题二

减少搜索的空间

利用知识缩小模型中各变量的取值范围,避免不必要的计算


问题三

采用合适的搜索顺序


说明:关于这个题目有很好的解决方法,这里就是为了讲解枚举这个方法;

关于这个题目的更好方法,可以访问:http://blog.csdn.net/sinapme/article/details/17137761




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值