冰雹數

任意給定一個正整數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;
}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章