#include<iostream>
using namespace std;
int klz(long long n,int len){
if(n==1) return len;
if(n%2==0){
klz(n/2,len+1);
}else{
klz(3*n+1,len+1);
}
}
int main()
{
int max=0,ans,temp;
for(long long i=13;i<=1000000;i++){
temp = klz(i,1);
if(temp>max){
max = temp;
ans = i;
}
}
cout<<ans<<endl;
return 0;
}
更新一下做法:
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
#define MAX_N 1000000
int f[MAX_N+5];
int get_chain(long long x) {
if(x == 1) return 1;
if(x <= MAX_N && f[x] != 0) return f[x];
int ret;
if (x & 1) ret = get_chain(3 * x + 1)+1;
else ret = get_chain(x / 2)+1;
if(x <= MAX_N) f[x] = ret;
return ret;
}
int main() {
int max_len = 0,num;
for(int i = 1; i < MAX_N; i++) {
int l = get_chain(i);
if (l > max_len) max_len = l, num = i;
}
cout<<num<<endl;
return 0;
}