1. 程式人生 > >OJ題:奇偶歸一猜想——求歸一過程中的最大值

OJ題:奇偶歸一猜想——求歸一過程中的最大值

題目:

題目內容:
奇偶歸一猜想——對於每一個正整數,如果它是奇數,則對它乘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 ;
}