• 【算法学习笔记】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;
    }
  • 相关阅读:
    关于按钮背景透明 + div拖拽
    asp.net 自带ajax 控件的小实例
    何去何从
    字符串的常用操作
    第一章
    C语言的基础知识2
    C语言的基础知识1
    socket
    缓冲区溢出学习
    OD调试
  • 原文地址:https://www.cnblogs.com/yuchenlin/p/sjtu_oj_1272.html
Copyright © 2020-2023  润新知