【算法学习笔记】68.枚举 SJTU OJ 1272 写数游戏

很简单 不用太考虑效率 虽然每次都要重新排序

注意vector的使用,非常便利。

还有一个技巧就是用一个have型bool数组来记录是否存在。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool have[1000] = {0};
vector<int> v; //用vector来实现动态数组的简便性


bool cmp_int(const int& a,const int& b){
    return a<b;
}

int main(int argc, char const *argv[])
{
    
    int n;
    cin>>n;
    for (int i = 0; i < n; ++i)
    {
        int k;
        cin>>k;
        v.push_back(k);
        have[k] = true;
    }

    
    while(1){

        bool have_new = false; //设置临时检查变量 看这次扫描是否有新元素

        //每次更新后要进行重新排序
        sort(v.begin(),v.end(),cmp_int);
        
        n = v.size();//用n来确定此次扫描的范围 如果循环里直接用size会产生迭代效应.
        for (int i = 1; i < n ; ++i){
            for (int j=0; j < i; ++j){ //枚举两个数
                int res = v[i] / v[j];
                if(!have[res]){//判断是否已经在vector里了
                    v.push_back(res);
                    have[res] = true;
                    have_new = true;
                }
            }
        }
        if(!have_new){
            break;
        }
    }
    
    cout<<v.size()<<endl;  
    return 0;
}

 

posted @ 2015-07-10 16:31  雨尘之林  阅读(483)  评论(0编辑  收藏  举报