tags: FoShiShi

迴圈

What

用迴圈的結構
重複去做特定的事情,直到停止事件成立

就像生活中要重複一直做的事情

例:
一直呼吸直到死亡
一直滑手機直到睡著


When

當要對一個幾乎相同的事情多次的執行
或者搭配陣列做使用

你不會想要寫這種東西的:

int a = 0; a += 1; a += 2; a += 3; a += 4; a += 5; a += 6; a += 7; a += 8; a += 9; a += 10; ...

所以這種時候我們需要迴圈


How

迴圈寫法

for

語法如下:

for(A; B; C) { D; }

順序:

  1. A:初始化,可以在這裡宣告東西、將東西設定初始值
  2. B:條件式,使迴圈一直執行直到此條件不滿足
  3. D:要做的事,就是要做的事,在迴圈停止前將重複執行
  4. C:漸進式,可以對對條件有差的變數做操作,讓迴圈能夠終止
  5. 回到 2.

例:

for(int i = 0; i < 5; i ++ ) { cout << i << " "; } // 輸出:0 1 2 3 4

while

語法如下:

while(A) { B; }

順序:

  1. A:條件式,使迴圈一直執行直到此條件不滿足
  2. B:要做的事,就是要做的事,在迴圈停止前將重複執行
  3. 回到 1.

例:

int a = 5; while(a > 0) { cout << a << " "; a -- ; } // 輸出:5 4 3 2 1

do while

語法跟while有部分一樣

語法如下:

do { B; } while(A)

while不一樣的地方在於,do while會先做一次操作才去判斷是否執行下一次

順序:

  1. B:要做的事,就是要做的事,在迴圈停止前將重複執行
  2. A:條件式,使迴圈一直執行直到此條件不滿足
  3. 回到 1.

例:

int a = 5; do { cout << a << " "; a -- ; } while(a > 10) // 輸出:5

迴圈內操作

break

跳出一層迴圈

例:

for(int i = 0; i < 5; i ++ ) { if(i == 3) { break; } cout << i << " "; } // 在 i == 3 時跳出for迴圈 // 輸出:0 1 2

continue

直接執行下一次迴圈

例:

for(int i = 0; i < 5; i ++ ) { if(i == 3) { continue; } cout << i << " "; } // 在 i == 3 時直接執行下次for迴圈 // 輸出:0 1 2 4 5

breakcontinue都是對迴圈做操作,
必須至少包在一層迴圈裡才能執行


巢狀迴圈

就是在迴圈中包迴圈

因為C++中的程式碼是由上執行到下
所以越裡面的迴圈會在執行時跑過越多次

例:

for(int i = 0; i < 2; i ++ ) { for(int j = 0; j < 2; j ++ ) { cout << i * 10 + j << " "; } } // 輸出:0 1 10 11

其中的引數也可以互相引響
很神奇(而且很雜)

例:

for(int i = 0; i < 5; i ++ ) { for(int j = 1; j < 5; j ++ , i -- ) { for(int k = 5; k > 0; k -- , j += 2) { if(k > 5) j -- ; if(j % 2 == 1) i += 2; if(i % 2 == 1) j ++ ; cout << i * 5 + j - k << " "; } } } // 輸出:6 19 32 45 58

實際應用

題目1

輸入一數N
請輸出1 ~ N中所有< 25的數字

solution

for,如果i == 25break

#include<iostream> using namespace std; int main() { int N; cin >> N; for(LL i = 1; i <= N; i ++ ) { if(i == 25) { break; } cout << i << " "; } cout << endl; }

或也可以直接判斷i是否< 25

#include<iostream> using namespace std; int main() { int N; cin >> N; for(LL i = 1; i <= N && i < 25; i ++ ) { cout << i << " "; } cout << endl; }

題目2

輸入一數N
請輸出1 ~ N中所有個位數字不是3 的數字

solution

for,如果i % 10 == 3continue

#include<iostream> using namespace std; int main() { int N; cin >> N; for(LL i = 1; i <= N; i ++ ) { if(i % 10 == 3) continue; cout << i << " "; } cout << endl; }