题意:x%2==1 x=x*3+1 , x%2==0 x=x/2; 对于确定的x,有确定的循环次数,问共几次。 例如2 . 2 1 cnt=2。
思路: 暴力,因为1e6也才循环了153次,所以复杂度必定不高。
注意细节: 对于这种有关l,r输入的题,下意识的就要去判断l,r的关系,这和最短路中用邻接矩阵去保存数据的时候,也要这样做。以免万一,有时候就会出这种地方的bug,所以还是日积月累把
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int ans=-INT_MAX;
int solve(int x)
{
int cnt=0;
while(x!=1)
{
if(x%2==0) x/=2;
else x=x*3+1;
cnt++;
}
return cnt+1;
}
int main(void)
{
int l,r;
while(cin >> l>> r)
{
int ll=l,rr=r;
if(l>r) swap(l,r);
ans=0;
for(int i=l; i<=r; i++)
{
ans=max(ans,solve(i));
}
printf("%d %d %d\n",ll,rr,ans);
}
}