注意範圍兩數,有可能先大後小。那就要先交換再開始做。
其他照著題意硬作就可以了。
一次 3n+1 的運作:
對於每一個正整數,如果它是奇數,則把它乘 3 再加 1;如果它是偶數,則把它除以 2,不斷重複,直到得到1為止。
讓 k = 最小值, 最小值+1, ... 最大值-1, 最大值
對每個 k 需要模擬一次 3n+1 的運作,並且記錄會跑幾次
若本次紀錄的次數比之前記錄的答案還大,就替換答案。
#include<iostream>
using namespace std;
int main()
{
int left, right, tmp;
int k, k_tmp;
int ans, ans_tmp;
while( cin >> left >> right )
{
cout << left << " " << right << " ";
if( left > right )
{
tmp = left;
left = right;
right = tmp;
}
ans = 0;
k = left;
while( k<=right )
{
ans_tmp = 1;
k_tmp = k;
while( k_tmp != 1 )
{
if( k_tmp%2 == 0 )
k_tmp = k_tmp/2;
else
k_tmp = k_tmp*3+1;
ans_tmp = ans_tmp+1;
}
if( ans_tmp > ans )
ans = ans_tmp;
k = k+1;
}
cout << ans << endl;
}
return 0;
}