OJ題:奇偶歸一猜想——求歸一過程中的最大值
阿新 • • 發佈:2019-02-18
題目:
題目內容:
奇偶歸一猜想——對於每一個正整數,如果它是奇數,則對它乘3再加1,如果它是偶數,則對它除以2,如此迴圈,最終都能夠得到1。 如n = 11,得序列:11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1。(步驟中最大數是52)
題目輸入正整數n,求這個n歸一過程中的最大值
輸入格式:
一個正整數
輸出格式:
一個正整數
輸入樣例:
11
輸出樣例:
52
時間限制:500ms記憶體限制:32000kb
程式碼實現:#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { int count = 0 ; int num , i , j; int max = 0, min = 1, temp ; int buffer[1000] = {0} , value = 0; scanf("%d", &num); while(1) { //if-else是奇偶歸一的核心演算法 if(num % 2 == 1){ num*=3 ; num+=1 ; } else { num >>= 1 ; } value = num ; buffer[count] = value ; count ++ ; if(num == 1) { //這裡是氣泡排序,目的是為了求出排序完後最大的那個數 for(j=1;j<=count-1;j++) { /*n個數處理n-1趟*/ for(i=0;i<=count-1-j;i++) { /*每趟比前一趟少比較一次*/ if(buffer[i]>buffer[i+1]) { temp=buffer[i]; buffer[i]=buffer[i+1]; buffer[i+1]=temp; } } } printf("%d",buffer[count-1]);//氣泡排序最大的那個數一定是最後一個,假設count=14,那麼最大的那個座標應當是count-1,陣列從0開始算 break ; } } return 0 ; }