#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
bool flag[10000];//虽然给定值最大为100,开始时候的想法是设为310,但是实际上有的数可能要进行数次(3n+1)/2的操作,310会出现段错误,索性直接给到10000
bool cmp(int a, int b)
{
return a > b;
}
int main()
{
memset(flag, 0, sizeof(flag));
int k, a[110];
scanf("%d", &k);
for (int i = 0; i < k; i++)
{
scanf("%d", &a[i]);
}
sort(a, a + k, cmp);//按照从小到大顺序排列,方便最后输出
for (int i = 0; i < k; i++)
{
int temp = a[i];
while (temp != 1)
{
if (temp % 2 == 0)
{
temp /= 2;
flag[temp] = 1;
}
else
{
temp = (3 * temp + 1) / 2;
flag[temp]=1;
}
}
}
int num = 0;
for (int i = 0; i < k; i++)//这一步计数完全是为了最后控制输出空格数量
{
if (flag[a[i]] == 0)
{
num++;
}
}
for (int i = 0; i < k; i++)
{
if (flag[a[i]] == 0)
{
printf("%d", a[i]);
num--;
if (num != 0) printf(" ");
}
}
return 0;
}
B1005 继续(3n+1)猜想 (25 分)
最新推荐文章于 2022-09-09 22:52:04 发布
