iT邦幫忙

0

我不太懂為什麼要i==j+1

c++
  • 分享至 

  • xImage

這是從網路上看到的,想理解這寫法,謝謝!

int main ()
{
for (int i=2; i<100; i++)
for (int j=2; j<i; j++)
{
if (i % j == 0)
break;
else if (i == j+1)
cout << i << " ";

    }   
return 0;

}

不明
【**此則訊息已被站方移除**】
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
7
海綿寶寶
iT邦大神 1 級 ‧ 2022-11-22 20:49:16

由程式碼「反推」回去
1.題目是「顯示2到99的質數」
2.答案是
兩層迴圈,外面是「2到99」(i)
裡面是「2到比自己小1的數」(j)
如果i可被j整除,表示不是質數
否則當j剛好比i小1時(所有數字都已判斷過,表示i是質數),就把 i 顯示出來

2
alien663
iT邦研究生 3 級 ‧ 2022-11-23 09:02:04

提供我高中剛接觸時的學習方式,這種簡單的題目,可以透過列出前10筆的方式去窮舉一下,讓自己容易思考。

j\i 2 3 4 5 6 7 8 9 10 11
2 X O O O O O O O O O
3 X X O O O O O O O O
4 X X X O O O O O O O
5 X X X X O O O O O O
6 X X X X X O O O O O
7 X X X X X X O O O O
8 X X X X X X X O O O
9 X X X X X X X X O O
10 X X X X X X X X X O
11 X X X X X X X X X X
  • 請善用程式碼區塊
int main ()
{
    for (int i=2; i<100; i++)
        for (int j=2; j<i; j++){
            if (i % j == 0) break;
            else if (i == j+1) cout << i << " ";
        }   
    return 0;
}
1
柳丁柚
iT邦新手 1 級 ‧ 2022-11-23 09:16:00

因為迴圈條件 “j<i”
你要打印出經過檢核的質數i
就只能在同過最後一個條件“除了1與自己無法被其他數整除”時打印i
故i==j+i

0
YC
iT邦好手 1 級 ‧ 2022-11-25 15:45:54

簡單,你直接把那段拿掉,執行就知道了

int main ()
{
    for (int i=2; i<100; i++)
        for (int j=2; j<i; j++){
            if (i % j == 0) 
                break;
        }  
    return 0;
}

很明顯因為沒有cout,所以log什麼都沒有。
cout要放哪裡比較適合?
答案是,確定找到解答的瞬間。

這個程式的目的是要列出 2 到 100 之間的質數。在迴圈裡,程式先嘗試用質數 2 到 i-1 來除 i,如果有一個數能夠整除 i,就表示 i 不是質數,因此跳出迴圈。如果所有的數都無法整除 i,就表示 i 是一個質數,因此把它輸出。

為什麼要加上 i==j+1 這個條件呢?這是因為這個迴圈只會檢查 2 到 i-1 之間的數,也就是說 j 最多只能到 i-2。如果沒有加上 i==j+1 這個條件,那麼當 i 是一個質數時,會出現類似這樣的情況:

當 i=5 時,因為沒有加上 i==j+1 這個條件,所以 5 不會被輸出。而如果加上了 i==j+1 這個條件,則會輸出 5。

0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-13 08:12:51
int main ()
{
for (int i=2; i<100; i++)
for (int j=2; j<i; j++)
{
if (i % j == 0)
break;
else if (i == j+1)
cout << i << " ";

    }   
return 0;
}

這段程式碼是一個用來找出2到100之間的所有質數的程式,其邏輯是透過兩個for迴圈,分別將每個數字都和前面所有的數字進行除法運算,如果前面的數字能整除當前的數字,就代表這個數字不是質數,因此就會跳出第二個for迴圈,進入下一個數字的檢查。

當檢查完前面所有的數字後,如果當前的數字還沒被判斷為非質數,也就是說它是質數的可能性較高,就會進入第二個判斷式if (i == j+1) 的判斷。這個判斷式的意思是:如果當前的數字i比前面所有檢查過的數字j都大1,那麼就代表這個數字i是質數。這是因為在第二個for迴圈中,j最後會停在比i小1的位置,如果此時i和j相等,那麼代表i被j整除了,因此i不是質數。只有在i比j大1的情況下,i才不會被前面的任何數字整除,才有可能是質數。當i被判斷為質數時,就會使用cout << i << " "; 將它印出來。

我要發表回答

立即登入回答