【pta】1005 继续(3n+1)猜想

题目

1005 继续(3n+1)猜想

思路

一开始审错题了,如果不是偶数就要先乘3加一再减半。本题用数组a存储输入的数,用数组pan表示是否为关键数。

代码

#include
#include
#include
using namespace std;
int pan[10000];
bool cmp(int a, int b)
{
	return a > b;
}
int main()
{
	int k,n;
	int flag = 0;
	cin >> k;
	vector<int>a(k);
	for (int i = 0;i < k;i++)
	{
		cin >>n;
		a[i] = n;
		while (n != 1)
		{
			if (n % 2 != 0)
			{
				n = 3 * n + 1;
			}
			n = n / 2;
			if (pan[n] == 1)
				break;
			pan[n] = 1;
		}
	}
	sort(a.begin(), a.end(), cmp);
	for (int i = 0;i < a.size();i++)
	{
		if (pan[a[i]] == 0)
		{
			if (flag == 1)
			{
				cout << " ";
			}
			cout << a[i];
			flag = 1;
		}
	}
	return 0;
}

你可能感兴趣的:(算法)