# For / While Loop
---
# 目錄
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
* [上週題目講解](#1)
---
## [T05 等比 or等差](http://mdcpp.mingdao.edu.tw/contest/29/problem/T05)
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
<!-- .slide: data-transition="convex-in convex-out" -->
* [解題想法](#4/1)
* [特殊狀況講解](#4/6)
* [參考程式碼解析](#4/9)
----
### 解題想法
----
### 解題想法
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
<!-- .slide: data-transition="convex-in" -->
<!-- .slide: data-transition="none-out" -->

----
### 解題想法
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
<!-- .slide: data-transition="none" -->

----
### 解題想法
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
<!-- .slide: data-transition="none" -->

----
### 解題想法
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
<!-- .slide: data-transition="none" -->

----
### 特殊狀況講解
----
### 特殊狀況講解
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
<!-- .slide: data-transition="none" -->

----
### 特殊狀況講解
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
<!-- .slide: data-transition="none" -->

----
### 參考程式碼解析
```cpp=
#include<iostream>
using namespace std;
int a, b, c;
int main(){
cin >> a >> b >> c;
if( a + c == b + b ){
if( ( a * c ) == b * b && a * c != 0){
cout << "B";
}else{
cout << "A";
}
}else if( ( a * c ) == b * b && a * c != 0){
cout << "C";
}else{
cout << "D";
}
}
```
----
### 參考程式碼解析
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
<!-- .slide: data-transition="none" -->
```cpp=
#include <iostream>
using namespace std;
int main(){
double a, b, c; cin >> a >> b >> c;
}
```
----
### 參考程式碼解析
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
```cpp=
#include <iostream>
using namespace std;
int main(){
double a, b, c; cin >> a >> b >> c;
if( b == 0 ){
if( c == 0 && a == 0 ){
cout << "A";
}else{
cout << "D";
}
}
}
```
---
# For 迴圈
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
* [基本介紹](#5/1)
* [語法與使用範例](#5/3)
* [應用問題](#5/7)
* [每日一題](#5/10)
----
## 基本介紹
----
## 基本介紹
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
比起等等會提到的 while 迴圈
for 迴圈更適合處理<span><!-- .element: class="fragment highlight-red " -->有次序</span>的事
其實 for 迴圈能做的事,while 迴圈都能做
為了<span><!-- .element: class="fragment highlight-red " -->視覺上的方便</span>,因此要學習 for 迴圈
----
## 語法與使用範例
----
## 語法與使用範例
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
```cpp=
for( A. ; B. ; D. )
{
C.
}
```
* A. ➨ 一開始先做什麼事<!-- .element: class="fragment" data-fragment-index="0" -->
* B. ➨ 條件式<!-- .element: class="fragment" data-fragment-index="2" -->
* C. ➨ 當 B. 條件成立時,就重覆一次的指令<!-- .element: class="fragment" data-fragment-index="3" -->
* D. ➨ 等 C. 做完一次,就執行的指令<!-- .element: class="fragment" data-fragment-index="4" -->
----
## 語法與使用範例
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
```cpp=
#include<iostream>
using namespace std;
signed main(){
int n, i;
cin >> n;
for( i = 1 ; i <= n ; i++ ){
cout << i << " ";
}
}
```
| 輸入 | 5<!-- .element: class="fragment" data-fragment-index="1" --> |
| -------- | -------- |
| 輸出 | 1 2 3 4 5<!-- .element: class="fragment" data-fragment-index="2" --> |
----
## 語法與使用範例
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
```cpp=
#include<iostream>
using namespace std;
signed main(){
int n, i, j; cin >> n;
for( i = 1 ; i <= n ; i++ ){
cout << "I =>" << i << '\n';
for( j = 0 ; j < n ; j++ ){
cout << "J => " << j << " ";
}
cout << '\n';
}
}
```
----
## 應用問題
----
## 星星問題
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
* 題目敘述
```
請輸出一個用 * 構成的 N 層三角形
```
* 範例輸入
```
3
```
* 範例輸出
```
*****
***
*
```
----
## 參考解答
----
## 參考解答
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
```cpp=
#include<iostream>
using namespace std;
signed main() {
int n;
cin >> n;
for( int i = 1 ; i <= n ; i++ ){
for( int j = 1 ; j < i ; j++ ){
cout << " ";
}
for( int j = 0 ; j <= 2 * n - i * 2 ; j++ ){
cout << "*";
}
cout << '\n';
}
}
```
---
# While 迴圈
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
* [基本介紹](#6/2)
* [語法與使用範例](#5/3)
* [應用問題](#5/7)
* [每日一題](#5/10)
----
## 基本介紹
----
## 基本介紹
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
While 迴圈的特色就是他的重複性
他是一種<span><!-- .element: class="fragment highlight-red " -->控制流程</span>的陳述
利用一個<span><!-- .element: class="fragment highlight-red " -->返回結果為布林值</span>的表達式作為循環條件
當這個表達式的返回值為<span><!-- .element: class="fragment highlight-red " -->「真」</span>時
則<span><!-- .element: class="fragment highlight-red " -->反覆執行迴圈內的程式碼</span>
若表達式的返回值為<span><!-- .element: class="fragment highlight-red " -->「假」</span>
則<span><!-- .element: class="fragment highlight-red " -->結束執行迴圈內的代碼</span>
繼續執行迴圈下面的指令
----
## 語法與使用範例
----
## 語法與使用範例
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
```cpp=
while( A.條件式 )
{
B.當條件成立時,就重覆做的事
}
```
----
## 應用問題
----
## 班級名條
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
* 題目敘述
```
Ryan 老師一個學年會教很多個班,每班的人數都不一樣
為了製作名條方便,Ryan 決定寫程式輸出 No.N ~ No.1
```
* 範例輸入
```
5
```
* 範例輸出
```
No.5
No.4
No.3
No.2
No.1
```
----
## 參考解答
----
## 參考解答
| | | | | | | | | | | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| | | | | | | | | | | | | | | | | |
```cpp=
#include<iostream>
using namespace std;
int main (){
int n;
cin >> n;
n++;
while( n-- ){
if( n == 0 ){
break;
}
cout << "No. " << n << '\n';
}
}
```
{"metaMigratedAt":"2023-06-17T11:48:13.382Z","metaMigratedFrom":"YAML","title":"2022.10.17","breaks":true,"slideOptions":"{\"theme\":\"serif\",\"transition\":\"convex\"}","contributors":"[{\"id\":\"caabc74e-d866-4d87-a18f-1cf893d1eaaf\",\"add\":23957,\"del\":12286}]"}