stackoverflow などで3n+1 の問題に関する質問をいくつか見たので、上記のヒントを修正してコードを正しくしようとしました。たとえば、今はどうかを確認しa > b
ます。または私long long
は simple の代わりに使用しますint
。それでも間違った答えが得られます。私の答えの何が問題なのですか?
私のコード:
#include <iostream>
using namespace std;
int count_steps(long long int num)
{
int counter = 1;
while(num != 1)
{
if (num % 2 == 1)
num = 3*num + 1;
else
num /= 2;
counter++;
}
return counter;
}
int max_between(long long int a , long long int b)
{
int max=0,step;
for(long long int i = a; i <= b; i++)
{
if ((step = count_steps(i)) > max)
max = step;
}
return max;
}
int main()
{
int max=0,a,b,step;
cin >> a;
cin >> b;
if (a >= b)
cout << a << ' ' << b << ' ' << max_between(b,a) << endl;
else
cout << a << ' ' << b << ' ' << max_between(a,b) << endl;
return 0;
}
テストケース:
1 10 (input)
1 10 20 (output)
900 1000 (input)
900 1000 174 (output)
1 1000000 (input)
1 1000000 525 (output)
1000000 1 (input)
1000000 1 525 (output)