角谷定理-XDOJ

Hancl9527發表於2020-12-15

標題:角谷定理
問題描述:
角谷定理定義如下:
對於一個大於1的整數n,如果n是偶數,則n = n / 2。如果n是奇數,則n = 3 * n +1,反覆操作後,n一定為1。
例如輸入22的變化過程: 22 ->11 -> 34 -> 17 -> 52 -> 26 -> 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1,資料變化次數為15。
輸入一個大於1的整數,求經過多少次變化可得到自然數1。
輸入說明
輸入為一個整數n,1<n<100000。
輸出說明
輸出變為1需要的次數
輸入樣例
樣例1輸入
22
樣例2輸入
33
輸出樣例
樣例1輸出
15
樣例2輸出
26

思路:因為有明確的結束條件(得到自然數1)所以採用while迴圈最佳;
採用for迴圈則於迴圈內部用if-else判斷是否退出迴圈。

程式碼:
方法一(for迴圈):

#include<stdio.h>

int main(){
	int n,count;
	scanf("%d", &n);
	for(count=0;;count++){
		if(n%2==0) n=n/2;
		else if(n%2!=0&&n!=1) n=n*3+1;
		else break;
	}
	printf("%d",count);
	return 0;
}

方法二(while迴圈):

#include<stdio.h>

int main(){
	int n,count=0;
	scanf("%d", &n);
	while(n!=1){
		if(n%2==0){
			n=n/2.0;
		}
		else if(n%2!=0){
			n= n*3+1;
		}
		count++;	
	}	//n=1時退出迴圈
	printf("%d",count);
	return 0;
}

相關文章