HW #4

Added by Wang Jia-Yin almost 2 years ago

這次的作業是 3n+1 問題。重修的同學應該不會陌生,希望大家自己練習寫看看。

首先敘述 3n+1 問題。
  1. 輸入一個數字 n。
  2. 輸出 n。
  3. 如果 n=1,則程式結束。
  4. 如果 n 是奇數,則令 n = 3n + 1;如果 n 是偶數,則令 n = n / 2。
  5. 回到第 2 步。

舉例而言,如果輸入 22,則應輸出如下數字
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

輸入輸出格式:

Input n : 22
Output : 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
繳交注意事項:
  1. 檔案繳交到 i-learning 平台。
  2. 務必繳交 c 程式檔,檔名任取 (建議為 main.c),副檔名須為 .c。
  3. 可以繳交一個純文字檔 Readme.txt,建議使用 notepad 或 notepad++ 編輯。
  4. 繳交期限 11/04, 23:59。
下週小考,下下週期中考I(到第四章)。

Replies (10)

RE: HW #4 - Added by Anonymous almost 2 years ago

老師 那個假如輸入1 是要顯示Input n : 1 還是Output只會有一個1??
Output : 1 1

RE: HW #4 - Added by Anonymous almost 2 years ago

n可以為負數?

RE: HW #4 - Added by Wang Jia-Yin almost 2 years ago

  1. 如果輸入 1 的話,畫面應該如下:
    Input n : 1
    Output : 1
    
  2. n 須為正數。

RE: HW #4 - Added by Anonymous almost 2 years ago

do {
if (n%2==0){ n=n/2 ;}
else if (n%2==1){ n=3*n+1 ;}
printf("%d" ,n);
system("pause");

}while (n!=1);
老師 為什麼 我只要將elae if改成if
就會變成無限迴圈???
就一直424242424242............

RE: HW #4 - Added by Anonymous almost 2 years ago

if和else是搭配使用的,看看下面程式碼

    if (n&1)
    {
      n=3*n+1;
      printf("%d ", n);
    }
    else
    {
      n/=2;
      printf("%d ", n);
    }
  }

表示當n為奇數時,執行printf("%d ", n)操作,
若在上述情況外(n不為奇數)時,則執行printf("%d ", n)操作。

再來看看你的程式碼…

    do
    {
        if (n%2==0)
        {
            n=n/2 ;
        }
        if (n%2==1)
        {
            n=3*n+1 ;
        }
        printf("%d" ,n);
        system("pause");

    }    while (n!=1);

改成兩個if時,他就是兩個獨立的判別。
所以當n=2時,碰到第一個if判別使得n=n/2=1,
接下來他又會再進入第二個if判別,使得n=3*n+1=4。

RE: HW #4 - Added by Anonymous almost 2 years ago

關於if - else條件判別,如果還不清楚可以把流程圖繪出,
或是參考這個網站。
http://squall.cs.ntou.edu.tw/cprog/Materials/IfStatement.html

RE: HW #4 - Added by Anonymous almost 2 years ago

老師 我為什麼都只會跑一次??像我輸入10救只跑5,我在想是不是while沒括好
我是while( ){
if( ){
}
else{ }
}
printf( ); 都只跑一次耶??

RE: HW #4 - Added by Anonymous almost 2 years ago

老師結果我變成藥一個一個對應打完才會停止程式了.. 像我輸入10它就蹦5 要我繼續輸入5變16....好瞎

PS:老師 三金以前沒教這個過..第一次看到ACM題目

RE: HW #4 - Added by Anonymous almost 2 years ago

老師前面2個回覆可以不用看了..我剛剛解開疑惑了..只是我不知道怎排成一排吶樣子..我現在是\n所以變一排直得...

RE: HW #4 - Added by Wang Jia-Yin almost 2 years ago

那就把 \n 拿掉吧。

(1-10/10)