1005.继续(3n+1)猜想

来源:互联网 发布:淘宝售后培训ppt 编辑:程序博客网 时间:2024/05/29 13:00

这里写图片描述

int count(int n, vector<int> &keys){    if (n == 1)    {        return 1;    }    else if (n % 2)    {        n = (3 * n + 1) / 2;        keys.push_back(n);        count(n,keys);    }    else    {        n /= 2;        keys.push_back(n);        count(n,keys);    }}bool check(int n, vector<int> &num)                            //查找原数据中是否含有关键字,若有则删除{    bool mark = false;    for (auto i = num.begin(); i != num.end();++i)    {        if (n==*i)        {            i = num.erase(i);            if (i==num.end())                               //如果是最后一项,需要手动减1迭代器,否则会溢出            {                --i;            }            mark = true;        }    }    return mark;}int _tmain(int argc, _TCHAR* argv[]){    int n;    cin >> n;    int *num = new int[n];    vector<int> num_cp;    for (int i = 0; i < n;++i)    {        cin >> num[i];        num_cp.push_back(num[i]);    }    for (int i = 0; i < n;++i)                        //对数组中的每个数都进行关键字保存,并检查原数据中是否含有关键字    {        vector<int> keys;        count(num[i],keys);        for (auto c:keys)        {            check(c, num_cp);           }    }    for (auto i = num_cp.begin(); i != num_cp.end()-1;++i)         //进行冒泡排序    {        for (auto j = num_cp.end()-1; j > i;--j)        {            if ((*j)>(*(j-1)))            {                int temp = *j;                *j = *(j - 1);                *(j - 1) = temp;            }        }    }    for (auto i = num_cp.begin(); i != num_cp.end(); ++i)          //输出    {        if (i == num_cp.end() - 1)        {            cout << *i;        }        else            cout << *i << ' ';    }    return 0;}
0 0
原创粉丝点击