• 【算法学习笔记】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;
    }
  • 相关阅读:
    UVa 531 Compromise
    UVa 10130 SuperSale
    UVa 624 CD
    2015年第一天有感
    Bootstrap3.0学习(一)
    IIS上.net注册
    11g Oracle导出表 默认不导出数据为空的表解决
    Oracle数据库密码重置、导入导出库命令
    每天进步一点--WCF学习笔记
    C#每天进步一点--异步编程模式
  • 原文地址:https://www.cnblogs.com/yuchenlin/p/sjtu_oj_1272.html
Copyright © 2020-2023  润新知