nice的方法
#include<iostream>
using namespace std;
int a[10001]={0};
void f(int j)
{
while(j>1)//开始进行卡拉兹猜想
{
a[j]++;
if(j%2==0){ j=j/2; a[j]++; }
else { j=(3*j+1)/2; a[j]++; }
}
}
int main()
{
int n,i,j;
cin>>n;
for(i=0;i<n;i++)
{
cin>>j;
f(j);
}
//输出
int flag=0;
for(int i=100;i>=0;i--)
{
//第一次输出改动flag
if(a[i]==1&&flag==0)
{
cout<<i;
flag=1;
continue; //跳出,flag作用后面
}
if(a[i]==1&&flag==1)
{
cout<<" "<<i;
}
}
return 0;
}
菜鸡暴力法
#include<iostream>
#include<algorithm>
using namespace std;
int a[101];
int f(int n)
{
if (n == 1) return 1;
else if (n > 1 && n % 2 == 0) return (n / 2);
else if (n > 1 && n % 2 == 1) return ((3 * (n + 1) / 2 - 1));
}
int y(int a, int b)
{
if (a == b) return 1;
if (b == 1) return 0;
else return y(a, f(b));
}
int main()
{
int b[101];
int n;
int i = 0, k = 0;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> a[i];
}
for (i = 0; i < n; i++)
{
int flag = 1;
for (int j = 0; j < n; j++)
{
if (i != j) { if (y(a[i], a[j])) flag = 0; }
}
if (flag == 1) b[k] = a[i], k++;
}
sort(b, b + k);
for (i = k - 1; i >0; i--)
{
cout << b[i] << " ";
}
cout << b[0];
}