题意:
题中给出了一个循环公式,当n为奇数时候n = 3*n + 1,为偶数时n = n/2;求出区间(i,j)包括i,j的最大循环次数。
注意:
输入i不一定小于j。
法一:暴力。
#include<stdio.h>
int main()
{
int n,m;
while(scanf("%d%d",&n,&m) != EOF)
{
int i,j;
int x = n>m?m:n;
int y = m>n?m:n;
int max = 0;
for(i = x;i <= y; i++)
{
j = 1;
int i1 = i;
while(i1 != 1)
{
if(i1%2 == 1)
i1 = 3*i1 + 1;
else
i1 = i1/2;
j++;
}
if(max < j)
max = j;
}
printf("%d %d %d\n",n,m,max);
}
return 0;
}
法二:利用函数,简单不少。(网上看的方法)。
#include<stdio.h>
int Cycle(int a)
{
int count = 1;
while(a != 1)
{
if(a%2 == 1)
a = a*3 + 1;
else
a = a/2;
count++;
}
return count;
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m) != EOF)
{
int x = n>m?m:n;
int y = m>n?m:n;
int max = Cycle(x);
for(;x <= y; x++)
{
int X = Cycle(x);
if(max < X)
max = X;
}
printf("%d %d %d\n",n,m,max);
}
return 0;
}