任意給定一個正整數N,
如果是偶數,執行: N / 2如果是奇數,執行: N * 3 + 1
生成的新的數字再執行同樣的動作,循環往復。
通過觀察發現,這個數字會一會兒上升到很高,一會兒又降落下來。
就這樣起起落落的,但最終必會落到“1”
這有點像小冰雹粒子在冰雹雲中翻滾增長的樣子。
比如N=9
9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的時候,這個“小冰雹”最高衝到了52這個高度。
輸入格式:
一個正整數N(N<1000000)
輸出格式:
一個正整數,表示不大於N的數字,經過冰雹數變換過程中,最高衝到了多少。
例如,輸入:
10
程序應該輸出:
52
再例如,輸入:
100
程序應該輸出:
9232
在網上看到了一些代碼,但多數都是用while循環以便與保存在數組之中,我的代碼用遞歸來完成
代碼:
#include <stdio.h>
int a[1000];
void chong(int n,int c)
{
int i=0;
if(n==1)
{
a[c]=1;
return ;
}
if(n>1)
{
if(n%2==0)
{
a[c]=n;
chong(n/2,c+1);
}
else
{
a[c]=n;
chong(n*3+1,c+1);
}
}
}
int main()
{
int n,b[100000];
int x,i,h,j=0;
scanf("%d",&n);
for(h=n;h>=2;h--)
{
chong(h,0);
for(i=0;a[i]!='\0';i++)
{
b[j++]=a[i];
}
}
x=b[0];
/*for(j=0;b[j]!='\0';j++)
{
printf("%d ",b[j]);
}*/
for(j=1;b[j]!='\0';j++)
{
if(b[j]>x)
{
x=b[j];
}
}
printf("%d\n",x);
return 0;
}