---
# System prepended metadata

title: Untitled
tags: [Program]

---

{%hackmd hackmd-dark-theme %}

<style>
    h2 {
        color: rgb(153, 50, 204) !important;
    }
</style>

:::spoiler **Python**

## HW3
請實作一程式，此程式可以要求使用者輸入10組資料。每次所輸入一組資料的內容如下所示：
O d1 d2
O代表指令動作
當O為1時，則請由小到大輸出d1以及d2所有小於100的共同因數
當O為2時，則請由小到大輸出d1以及d2所有小於100的共同倍數，若無，則印出None

| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
| 1 10 20 | 1 2 5 10 |
| 2 50 60 | None |
| 2 30 45 | 90 |

```python=
for i in range(0,10):
    o,d1,d2 = input().split()
    o=int(o)#改變型態
    d1=int(d1)#改變型態
    d2=int(d2)#改變型態
    if(o==1):
        i=0
        while(i<100):#因數
            i=i+1
            if(d1 % i==0 and d2 % i==0):
                print(i)
    else:
        i=0 
        j=0
        while(i<100):
            i=i+1
            
            if(i%d1==0 and i%d2==0):
                j+=1
                print(i)
        if(j==0):
            print("None")
```

###### tags: `Program`


## HW4
請實作一程式，此程式可以要求使用者輸入三行字串，當輸入完一行字串後，請計算在此字串中字元a~zA~Z所出現的頻率次數，請輸出頻率次數非零的字元(請依a~zA~Z順序輸出)以及其頻率次數。
請用連續星星符號個數來代表頻率次數，如出現N次，請以N個星星符號表示。
| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
| Hello World |d * e * l *** o ** r * H * W * |
| Good Morning, everyone. |d * e *** g * i * n *** o **** r ** v * y * G * M * |
| byebye |b ** e ** y ** |
```python=1
for _ in range(3):
    array1 = [0] * 26
    array2 = [0] * 26

    for x in input():
        if x.islower():#檢查是否為小寫字母
            array1[ord(x) - 97] += 1

        elif x.isupper():#檢查是否為大寫字母
            array2[ord(x) - 65] += 1

    for i, cnt in enumerate(array1):
        if cnt > 0:
            print(chr(i + 97), '*' * cnt, end=' ')

    for i, cnt in enumerate(array2):
        if cnt > 0:
            print(chr(i + 65), '*' * cnt, end=' ')
```
## HW5
請實作一程式，此程式可以要求使用者輸入一整數N，若N>0，則接下來會請使用者輸入N組資料，每一組資料格式如下所示：
L TOKEN1 TOKEN2
L代表要輸出L * L個圖案，左下方的圖案為TOKEN1，其餘圖案為TOKEN2
TOKEN1或TOKEN2不能為空白、\t 或 \n
舉例，假設TOKEN1 = ‘$’，TOKEN2 = ‘@’，則
請用連續星星符號個數來代表頻率次數，如出現N次，請以N個星星符號表示
| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
| 3 ||
| 5 @ # |@####<br /> @@###<br /> @@@##<br /> @@@@#<br /> @@@@@ |
| 7 & * |&******<br /> &&*****<br /> &&&****<br /> &&&&***<br /> &&&&&**<br /> &&&&&&*<br /> &&&&&&&|

```python=
for _ in range(int(input())):
    l,a,b=input().split()

    l = int(l)

    for i in range(1, l+1):
        print(a*i+b*(l-i))#字串可相加相乘
```

## HW6
剪刀石頭布遊戲是我們日常生活中常玩的一個小遊戲，常以三戰兩勝或五戰三勝或N戰(N+1)/2勝等結果來決定最後的勝負。當我們用Y代表剪刀、M代表石頭、O代表布，請試做一程式可以允許使用者可以不斷地輸入一組資料，直到此組資料為不合法資料則結束程式。每組資料一開頭為N值(正奇數值，若不為正奇數值則為不合法資料)，代表之後的勝負是幾戰幾勝，接下來輸入兩個人的出拳結果，請根據所輸入的資料並印出是第一個人或是第二個人贏得最終勝利。

假設第一個人贏，則顯示The first person wins the game
假設第二個人贏，則顯示The second person wins the game
| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
| 3 
Y M
O O
Y Y
O Y
5 | The second person wins the game| 
M Y
M M
O M
Y O
0 |The first person wins the game|

```python=
while True:

    n= int(input())
    if n%2==0:
        break
    win = (n+1) // 2
    a, b = 0, 0

    while a < win and b < win:

        n1,n2=input().split()
        
        if n1=='Y'and n2=='O'or n1=='M' and n2=='Y' or n1=='O' and n2=='M':
            a+=1
        elif n1==n2:
            continue
        else:
            b+=1

    if(a>b):
        print("The first person wins the game")
    else:
        print("The second person wins the game")

```

## HW7
請試做一程式，此程式可以允許使用者不斷地輸入一組資料，直到此組資料為不合法資料則結束程式。每組資料格式如下所示：
k d1 d2 d3
k d1 d2 d3 均需為正整數
請根據每組資料，印出 d1, d2, d3 的前k小公倍數
| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
|5 1 3 4 5 6 7|3 ***
4 26 28 |549828 19656 29484 39312
2 2 9 10|10 **********
0|跳出


```python=
while True:
    k,n1,n2,n3=map(int,input().split())
    if(k==0):
        break
    for i in range(n1*n2*n3+1):
        if i%n1==0 and i%n2==0 and i%n3==0:
            for j in range(1, k+1):
                print(i*j,end=' ')
            break

```



::: 

:::spoiler **C**




## HW8
請實作一程式，此程式可以不斷地要求使用者輸入一組資料，直到此組資料的第一個數字不為正整數則結束程式。請根據每組資料的內容印出其相對應的結果。每組資料的格式內容如下所示：
N O d1 d2 … dN
N代表接下來有一個指令動作O以及N筆資料d1, d2, …, dN
O為1時則請印出d1, d2, …, dN中最小的值，即minimum{d1, d2, …, dN}，並印出相對應的星星(星星與星星之間沒有空白)
O為2時則請印出d1, d2, …, dN中最大的值，即maximum{d1, d2, …, dN}，並印出相對應的星星(星星與星星之間沒有空白)
| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
5 1 3 4 5 6 7|3 ***|
2 2 9 10|10 **********
0|跳出

```c=
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int n, o, ans, d;
    while (cin >> n && n != 0) {
        cin >> o >> ans;

        if (o == 1) {
            for (int i = 0; i < n - 1; i++)
            {
                cin >> d;
                if (ans > d)
                    ans = d;
            } 

        }
        else 
        {
            for (int i = 0; i < n - 1; i++)
            {
                cin >> d;
                if (ans < d)
                    ans = d;
            }
        }

        cout << ans << ' ' << string(ans, '*') << endl;
    }

    return 0;
}
```



## HW7
請實作一程式，此程式可以要求使用者輸入3組資料，每一組資料的格式如下所示：
N1 N2 N3
請輸出每一組資料內三個數字的最小公倍數
| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
6 2 4|12
1 5 3|15
8 2 16|16



```c=
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    for (int x = 1; x <= 3; x++)
    {
        int a[3];
        cin >> a[0] >> a[1] >> a[2];
        for (int i = 1; i <= a[0]* a[1] * a[2]; i++)
        {
            if (i % a[0] == 0 && i % a[1] == 0 && i % a[2] == 0)
            {
                printf("%d\n", i);
                break;
            }

        }
    }
    return 0;
}
```
## HW6
請實作一程式，此程式可以要求使用者輸入3組資料，每一組資料的格式如下所示：
N1 N2 N3
請輸出每一組資料內三個數字的最大公因數

| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
6 2 4|2
1 5 3|1
8 2 16|2


```c=
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    for(int x=1;x<=3;x++)
    {
        int a[3];
        cin >> a[0] >> a[1] >> a[2];
        int maxma = max(max(a[0], a[1]), a[2]);
        for (int i = maxma; i >= 1; i--)
        {
            if (a[0] % i == 0 && a[1] % i == 0 && a[2] % i == 0)
            {
                printf("%d\n", i);
                break;
            }
            
        }
    }
    return 0;
}
```

## HW5
請實作一程式，此程式可以要求使用者輸入N組資料，每一組資料的格式如下所示：
O N1 N2
O 為指令動作，只能是1 or 2
當O是1時，假設N1和N2的中最小值為MIN、最大值為MAX，請輸出從MIN到MAX範圍內的整數和，包含MIN及MAX。
當O是2時，請輸出從MIN到MAX範圍內的整數乘積，包含MIN及MAX。

| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
3|
1 1 10|55
2 1 10|3628800
1 10 1|55

```c=
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int k, a, b, c;
    cin >> k;
    for (int i = 0; i < k; i++)
    {
        int sum = 0;
        cin >> a >> b >> c;
        if (a == 1)
        {
            if (b > c)//b=1 c=10
            {
                while (c <= b)//成立繼續
                {
                    sum += c;
                    c++;
                }
            }
            else
            {
                while (b <= c)
                {
                    sum += b;
                    b++;
                }
            }
            printf("%d\n", sum);
        }    
        else
        {
            sum = 1;
            if (b > c)
            {
                while (c <= b)
                {
                    sum *= c;
                    c++;
                }
            }
            
            else
            {
                while (b <= c)
                {
                    sum *= b;
                    b++;
                }
            }                        
            printf("%d\n", sum);        
        }
    }

    return 0;
}
```
## HW4
請實作一程式，此程式可以要求使用者輸入3組資料，每一組資料包含9個數字，且每個數字範圍為[1,10] (包含1及10)。請輸出每一組資料的總和及中間值。
在此注意到的是，中間值為將輸入資料由小到大排列取第 (9+1)/2 個數字(即第五個數字) 
舉例：假設輸入資料分別為 1 9 3 2 5 4 8 6 7 時
將此輸入資料排序的結果為 1 2 3 4 5 6 7 8 9，因此取排列好的第5個數字，即5 
| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
1 9 3 2 5 4 8 6 7|45 5
1 1 3 2 5 4 8 6 7|37 4 
7 6 8 4 5 2 3 1 1|37 4


```c=
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int n = 3;
    while (n--) {
        int nums[10] = {};
        int total = 0;

        for (int i = 0; i < 9; i++) {
            cin >> nums[i];
            total += nums[i];
        }

        sort(nums, nums + 9);
        cout << total << " " << nums[4] << endl;
    }

    return 0;
}
```
## sort用法
```c=
#include <iostream>
#include <algorithm>

int main() {
    int arr[] = {4, 5, 8, 3, 7, 1, 2, 6, 10, 9};
    std::sort(arr, arr+10);
    std::cout << "sort array by default (increasing):" << std::endl;
    for (int i = 0; i < 10; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}
```
1 2 3 4 5 6 7 8 9 10

## HW9

請實作一程式，此程式可以不斷地要求使用者輸入一值K，直到K<=0時結束程式。當一大於零的K值輸入後，請輸出相對應的K K乘法表。
當K為9時，即是九九乘法表
| <div style="width:290px">輸入資料</div> | <div style="width:290px">輸出結果</div> |
| -------- | -------- |
1|1*1=1
2|1*1=1 1*2=2 2*1=2 2*2=4
3|1*1=1 1*2=2 1*3=3
2*1=2 2*2=4 2*3=6
3*1=3 3*2=6 3*3=9|
|0|跳出   

```c=
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    int k;
    while(true)
    {
        cin >> k;
        if (k <= 0)
            break;
        for (int i = 1; i <= k; i++)
        {
            for (int j = 1; j <= k; j++)
                printf("%d*%d=%d ", i, j, i * j);

            printf("\n");
        }
    }
    return 0;
}
```