您的位置:首页 > 其它

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

2015-12-05 20:14 260 查看


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
;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: