慕的地8271018
2024-01-28 16:19:35
我正在編寫一個程序,計算素數序列,然后將它們顯示在表格中。程序要求用戶輸入 2 個整數:第一個是序列開始的數字,第二個是要找到的素數的數量。到這里,程序運行完美。問題是素數應該顯示在“方形”表格中,這意味著如果可能的話,表格應該是完美的正方形。如果不可能,則行數和列數相差不應超過 1。這是我嘗試過的示例: int columns = 0; int rows = 0; int element = 0; rows = (int) Math.sqrt(numberOfPrimes); columns = (rows * rows) < numberOfPrimes ? rows + 1 : rows; if(numberOfPrimes%3 - 1.0 < 0.001) { columns = rows + 1; rows = rows + 1; } if (numberOfPrimes > 100) { columns = 10; if (rows * rows < numberOfPrimes) { rows = numberOfPrimes / 10; } } System.out.println(numberOfPrimes + " = [" + rows + "," + columns + "]"); for (int r = 0; r < rows; r++) { for (int c = 0; c < columns; c++) { System.out.printf("%6s", primesArray[element] + "\t"); if (element == primesArray.length - 1) { break; } element++; } System.out.println(); }該表對于某些輸入可以正確顯示,但對于其他輸入則不能正確顯示。我知道這段代碼是不正確的,但我不知道如何編寫正確的代碼來執行此操作。任何幫助,將不勝感激。編輯:我將代碼更新為現在的代碼。該表對于奇數(例如 33)無法正常工作。它只打印 30 個數字,而不打印剩余的 3 個。我需要額外的一行來打印這些剩余的數字,即使該行不完整。我試圖解決這個問題,但我創建了一個數組越界錯誤。另外,我添加了一個 if 語句,因為如果素數的數量超過 100,那么該表應該只有 10 列,并且不會是正方形。編輯2:我設法解決了問題,并且更新了代碼以顯示解決方案。然而,我不得不使用休息時間,而我的教授不允許我們使用休息時間。一旦到達數組中的最后一個元素,是否有其他方法可以退出循環?
1 回答

瀟瀟雨雨
TA貢獻1833條經驗 獲得超4個贊
這是一種方法
int primeNumbersToBeFound = 33;
int rows = (int) Math.ceil(Math.sqrt(primeNumbersToBeFound));
int cols = rows;
if (rows * (rows - 1) >= primeNumbersToBeFound) {
cols--;
}
System.out.println(primeNumbersToBeFound + " = [" + rows + "," + cols + "]");
然后您可以循環打印素數的行和列。
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols && element < primesArray.length; c++, element++) {
System.out.print(primesArray[element]);
}
System.out.println();
}
添加回答
舉報
0/150
提交
取消