2013-11-22 24 views
2

修訂 你怎麼能使用此方法(在Collat​​z猜想)找到與操作之間最多的號碼,說4和230
讚賞任何指導。Java的多輸入

public static void main(String[] args) { 

    System.out.print("Enter a low integer "); 
    Scanner input = new Scanner(System.in); 
    int low = input.nextInt(); 
    System.out.print("Enter a high integer "); 
    int number = input.nextInt(); 
    maxendurance(number); 
} 

public static int maxendurance(int number) { 

    int count = 0; 

    System.out.print("The number " + number); 
    // need to loop this i suppose in relative to user input 
    while (number != 1) { 
     number = (number & 1) != 0 ? number * 3 + 1 : number >> 1; 
     count++; 
    } 
    System.out.println(" has endurance: " + count); 

    return number; 
} 
+0

可以嗎解釋得更清楚 –

+0

這看起來像你試圖實施Collat​​z猜想? – MightyPork

+0

是的,即時通訊使用Collat​​z猜想。我需要在用戶輸入低和用戶輸入高(例如15和245034之間)之間的每個數字上應用該方法。然後在達到1之前找到操作次數最多的號碼。 –

回答

0

您將不得不遍歷低和高之間的所有數字。看看for -loops:

for(int number = low; number <= high; number++) 
{ 
    // do something with number 
} 

不知怎的,你將需要爲循環中的每個號碼執行a(提示:在把它作爲一個參數)。然後跟蹤最高計數的號碼。

噢,請給出你的方法比ab更清楚 - 沒有人會理解他們在沒有通過代碼的情況下做了什麼。

0

首先,移動輸入出法a的:

public static void main(String[] args) { 
    System.out.print("Enter an integer to be checked: "); 
    Scanner input = new Scanner(System.in); 
    int number = input.nextInt(); 
    a(number); 
    b(); 
} 

public static int a(int number) { 
    int count = 0; 
    System.out.print("The number " + number); 
    [...] 

然後你可以使用一個簡單的for循環迭代lowhigh之間:

int bestNumber = -1; 
int bestScore = -1; 
for (int i = low; i <= high; i++) { 
    int score = a(i); 
    if (score < bestScore) { 
     bestNumber = i; 
     bestScore = score; 
    } 
} 
結果然後可以發現於 bestNumber

0

我會建議一個更高級的方法,以防萬一相關事件發生。如果您關注時間效率,Memoization或Dynamic Programming可以幫助您,特別是逆龍遞歸。

我給你一個提示。如果你需要更多,只需評論。

以3爲例。一個變換T有T(3)= 10。如果事先您已經發現需要10次轉換爲1並且您將地圖(10,v)存儲在地圖中,那麼您立即知道需要(v + 1)個步驟才能將3轉換爲1.