很简单 不用太考虑效率 虽然每次都要重新排序
注意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; }
时间: 2024-10-08 09:04:58