Yahoo奇摩知識+ 將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+ 網站將會轉為唯讀模式。其他 Yahoo奇摩產品與服務或您的 Yahoo奇摩帳號都不會受影響。如需關於 Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

JAVA題目求解(急 20點

請JAVA高手寫一個JAVA程式碼 如下題

功課告急但天賦不太好~需要高手協助

拜託大大們幫忙了!

問題描述 :

一架飛機上載著 k 個好人以及 k 個壞人,可是在飛行途中,飛機零件損壞,被迫停在一個小島。這個島上居住著食人族,食人族把飛機上所有的人都綁起來,並且決定吃掉他們一半的人數。酋長叫人質排成一個圈,每個人都有一個編號,以順時針來數,編號 1 到編號 k 是好人,而編號 k + 1 到編號 2k 是壞人。酋長從編號 1 的人開始數,數到第 m 個人就要被煮來吃掉,並且再從下一個人開始數,同樣數到第 m 個人就要被吃掉,依此類推,一直到吃完一半的人數為止。聰明的你,請找出一個最小的 m 值,使得在所有 k 個壞人被吃掉前,不會有任一個好人被吃掉。

輸入說明 :

輸入檔共有 若干 筆測資,每筆測資佔一行。每筆輸入測資是一個整數 k (0 ≤ k ≤ 13) ,代表該飛機上共有 2 × k 位乘客。若是輸入測資的整數為 0 ,即代表輸入測資結束。

輸出說明 :

請輸出最小 m 值, 使得在所有壞人被吃掉前,不會有任何一個好人被吃掉。 每筆測資答案輸出於一行。

範例 :

輸入範例 輸出範例

3       4

4       30

0

方便的話幫我加註解,流程圖

感恩師兄>///<

3 個解答

評分
  • 6 年前
    最佳解答

    其實他給的範例就有錯誤,輸入3答案應該是5而不是4,因為在所有壞人被吃掉之前,不能有任何一個好人被吃掉。如果K=3,M=4,那麼在第二輪的時候,編號2的好人就會被吃掉了。

    2015-06-05 20:45:44 補充:

    import java.util.Scanner;

    public class test {

    public static void main(String[] args) {

    int sc = 0;

    while (true) {

    try {

    sc = new Scanner(System.in).nextInt();

    if(sc==0)

    break;

    if (-1 < sc && sc < 14)

    System.out.println(a(sc));

    else {

    System.out.println("輸入數值不再範圍內,請重新輸入");

    }

    } catch (Exception e) {

    System.out.println("輸入錯誤,請重新輸入");

    }

    }

    System.out.println("程式結束");

    }

    private static int a(int i) {

    int z, m = i, x = 0, y;

    while (x != i) {

    m++;

    z = i * 2;

    x = 0;

    y = (m - 1) % z;

    while (y >= i) {

    x++;

    z--;

    y = (y - 1 + m) % z;

    }

    }

    return m;

    }

    }

    參考資料: 信哥的愛
  • 6 年前

    題目有講:

    酋長叫人質排成一個圈,每個人都有一個編號,以順時針來數,編號 1 到編號 k 是好人,而編號 k + 1 到編號 2k 是壞人。

    應該沒很困難理解吧。樓上的

  • 卸貨
    Lv 5
    6 年前

    這個問題非常的困難,難的部份倒不是如何計算位置的問題,真正應該要先解決的問題是如何區分出好人和壞人?(我們只知道人數而已,但誰是好人誰是壞人呢?)

    第二個一樣困難的問題是,如何讓這些壞人乖乖的排在自己即將會被吃掉的位置上?如何才能發揮領導魅力來主導每個人的位置排列,而且還是在一邊食人族加上一邊自己人的雙重壓力下?

    基本上我覺得這個問題非常具有意義,還有其他大大願意提供意見嗎?

還有問題?馬上發問,尋求解答。