---
tags: C++複習講義
---
# 108題目(B卷)
[回目錄](/jHU9MQS5QS-Uvs-ZS6CSxg)
:::success
為了幫(強)助(迫)各位思考,以下僅提供<font color=#f00>部分程式碼</font>,有任何問題歡迎私訊[資訊社IG](https://www.instagram.com/dzif_22nd_/?hl=zh-tw)。
程式碼內的 `__?__` 是刻意挖掉的,希望同學能先自行思考後將其還原
:::
## 最大公因數及最小公倍數
> 輸入三正整數,求其最大公因數及最小公倍數
```cpp=
while (__?__)
{
double a1, b1, c1; //double 浮點數
int a, b, c, min, max;
cout << "請輸入A";
cin >> a1;
cout << "請輸入B";
cin >> b1;
cout << "請輸入C";
cin >> c1;
if ((double)(int)a1 != a1 || (double)(int)b1 != b1 || (double)(int)c1 != c1 || a1 <= 0 || b1 <= 0 || c1 <= 0)
{
cout << "請確認你輸入的數字!";
continue;
}
a = (int)a1; //之後的%不接受浮點數
b = (int)b1;
c = (int)c1;
if (a >= b && a >= c)
{
max = a; //找max-最小公倍數大於三數中最大數
}
else if (b >= a && b >= c)
{
max = b;
}
else
{
max = c;
}
if (a <= b && a <= c)
{
min = a; //找min-最大公因數小於三數中最小數
}
else if (b <= a && b <= c)
{
min = b;
}
else
{
min = c;
}
int x = 1;
for (int i = 2; i <= __?__; i++)
{
if (a % i == 0 && b % i == 0 && c % i == 0)
{
x = __?__;
}
}
int y = max;
while (y % a != 0 || y % b != 0 || y % c != 0)
{
y += 1;
}
cout << a << "、" << b << "、" << c << "之最大公因數為" << x << "最小公倍數為" << y << endl;
}
```
::: spoiler 參考答案
```cpp=
while (true)
{
double a1, b1, c1;
int a, b, c, min, max;
cout << "請輸入A";
cin >> a1;
cout << "請輸入B";
cin >> b1;
cout << "請輸入C";
cin >> c1;
if ((double)(int)a1 != a1 || (double)(int)b1 != b1 || (double)(int)c1 != c1 || a1 <= 0 || b1 <= 0 || c1 <= 0)
{
cout << "請確認你輸入的數字!";
continue;
}
a = (int)a1;
b = (int)b1;
c = (int)c1;
if (a >= b && a >= c)//找出最大
{
max = a;
}
else if (b >= a && b >= c)
{
max = b;
}
else
{
max = c;
}
if (a <= b && a <= c)//找出最小
{
min = a;
}
else if (b <= a && b <= c)
{
min = b;
}
else
{
min = c;
}
int x = 1;
for (int i = 2; i <= min; i++) //找最大公因數
{
if (a % i == 0 && b % i == 0 && c % i == 0)
{
x = i;
}
}
int y = max;
while (y % a != 0 || y % b != 0 || y % c != 0) //找最小公倍數
{
y += 1;
}
cout << a << "、" << b << "、" << c << "之最大公因數為" << x << "最小公倍數為" << y << endl;
}
```
:::
## 兩正整數間質數,並求其總和
> 輸入兩正整數,列出兩數之間所有質數並加總
> 質數 : 因數只有1和自己
```cpp=
while (true)
{
double n1, m1;
cout << "請輸入整數n";
cin >> n1;
cout << "請輸入整數m";
cin >> m1;
if ((double)(int)n1 != n1 || (double)(int)m1 != m1 || n1 <= 0 || n1 <= 0)//確認是否輸入整數
{
cout << "數字輸入錯誤!" << endl;
continue;
}
int n = n1, m = m1, sum = 0;
if (__?__)
{
int temp; //臨時變數
temp = n;
n = m;
m = temp;
}
cout << n << "~" << m << "之間的質數有:";
for (int i = n; i <= m; i++)
{
bool is = true;//假設其為質數
for (int k = 2; k < i; k++)
{
if (i % k == 0)
{
is = false;//確認不是質數
break;
}
}
if (is)//如果是質數
{
cout << i << "\t";
sum += i;
}
}
cout << "\n"
<< "其總和為:" << sum << endl
<< endl;
}
```
::: spoiler 參考答案
```cpp=
while (true)
{
double n1, m1;
cout << "請輸入整數n";
cin >> n1;
cout << "請輸入整數m";
cin >> m1;
if ((double)(int)n1 != n1 || (double)(int)m1 != m1 || n1 <= 0 || n1 <= 0)//確認是否輸入整數
{
cout << "數字輸入錯誤!" << endl;
continue;
}
int n = n1, m = m1, sum = 0;
if (n > m)
{
int temp;
temp = n;
n = m;
m = temp;
}
cout << n << "~" << m << "之間的質數有:";
for (int i = n; i <= m; i++)
{
bool is = true;
for (int k = 2; k < i; k++)
{
if (i % k == 0)
{
is = false;//確認不是質數
break;
}
}
if (is)//如果是質數
{
cout << i << "\t";
sum += i;
}
}
cout << "\n"
<< "其總和為:" << sum << endl
<< endl;
}
```
:::
## 隨機亂數兩十位正整數N跟M,並計算總合
> 產生兩個十位數亂數,輸入其總和,並判斷加總正確或者錯誤
> 取亂數公式 : 大數減小數再加1
```cpp=
#include <ctime>
```
```cpp=
while (true)
{
srand(time(NULL)) //下亂數種子
int n = rand() % (__?__) + 9;
int m = rand() % (__?__) + 9;
int sum = n + m;
int input;
cout << "請計算" << n << "+" << m << "=";
cin >> input;
if (input == sum)
{
cout << "你答對了,答案就是" << sum;
}
else
{
cout << "你答錯了,答案是" << sum;
}
cout << endl
<< endl;
}
```
::: spoiler 參考答案
```cpp=
#include <ctime>
```
```cpp=
while (true)
{
srand(time(NULL));//下亂數種子
int n = rand() % (99 - 9 + 1) + 9;
int m = rand() % (99 - 9 + 1) + 9;
int sum = n + m;
int input;
cout << "請計算" << n << "+" << m << "=";
cin >> input;
if (input == sum)
{
cout << "你答對了,答案就是" << sum;
}
else
{
cout << "你答錯了,答案是" << sum;
}
cout << endl
<< endl;
}
:::
## 級數
> 輸入一數,若為偶數,則計算1;若為奇數,則計算2
1.$\sqrt{2}+\sqrt{4}+\sqrt{6}+···+\sqrt{n}$
2.$1/1+1/3+1/5+···+1/n$
```cpp=
#include <cmath>
```
```cpp=
while (true)
{
double nn;
double output = 0;
cout << "請輸入整數N:";
cin >> nn;
if ((double)(int)nn != nn || nn < 0)//確認是否輸入整數
{
cout << "請輸入整數!" << endl;
continue;
}
int n = (int)nn;
if (n % 2 == 0)
{
for (int i = 2; i <= n; i += 2)
{
output+=sqrt(i);
}
}
else
{
for (int i = 1; i <= n; i += 2)
{
output += 1.0 / i;
}
}
cout << n << "的級數:" << output << endl;
}
```
::: spoiler 參考答案
```cpp=
#include <cmath>
```
```cpp=
while (true)
{
double nn;
double output = 0;
cout << "請輸入整數N:";
cin >> nn;
if ((double)(int)nn != nn || nn < 0)//確認是否輸入整數
{
cout << "請輸入整數!" << endl;
continue;
}
int n = (int)nn;
if (n % 2 == 0)
{
for (int i = 2; i <= n; i += 2)
{
output += sqrt(i);
}
}
else
{
for (int i = 1; i <= n; i += 2)
{
output += 1.0 / i;
}
}
cout << n << "的級數:" << output << endl;
}
```
:::