APCS實作題2022年6月第1題數字遊戲參考解法

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

題目連結 https://zerojudge.tw/ShowProblem?problemid=i399

題目說明
給三個介於 1 ~ 9 的整數 A1,A2,A3。
先輸出一個正整數 P 表示眾數數量,也就是出現最多次的數字的次數。
接下來將輸入的三個數字去除重複(剩下一個)後由大到小依序輸出。

範例一:
輸入 6 6 6 ,輸出 3 6。
因為出現最多次的數字是 6,共出現 3 次,並且只有出現 6 這個數字,因此輸出 3 6。

範例二:
輸入 7 9 7 ,輸出 2 9 7。
因為出現最多次的數字是 7,共出現 2 次,並且出現了 7 和 9,因為集合需要由大到小輸出,因此輸出 2 9 7。

範例三:
輸入 4 1 8 ,輸出 1 8 4 2。
因為三個數字各出現 1 次,集合由大到小輸出,因此輸出 1 8 4 1。

想法:
  1. 將輸入的數字記錄在陣列A。
  2. 用陣列或串列cnt紀錄數字 1 ~ 9 各自出現幾次。找次數陣列cnt中的次數最大值。
  3. 依次數值對陣列A由小排到大。
  4. 對陣列A,從最大值開始輸出不重複的數字,

C++ 程式碼
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
  const int N = 3;
  int a[N];

  while(cin >> a[0] >> a[1] >> a[2]) {
    int cnt[10] = {0};  // 紀錄數字 1 ~ 9 各自出現幾次
    // 算數字 1 ~ 9 各自出現幾次
    for(int i = 0; i < N; i++)
      cnt[a[i]]++;
    // 找眾數數量P
    int P = 0;
    for(int i = 0; i < 10; i++)
      if(P < cnt[i]) P = cnt[i];
   
    cout << P << " ";
    sort(a, a + N);   // 由小排到大
    cout << a[2];     // 從最大數字輸出

    for(int i = 1; i >= 0; i--)
      if(a[i+1] != a[i]) // 輸出不重複的數字
        cout << " " << a[i];

    cout << endl;
  }
  return 0;
}


Python 程式碼
while True:
    try:
        A = list(map(int, input().split()))
        # 紀錄數字 1 ~ 9 各自出現幾次
        cnt = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        # 算數字 1 ~ 9 各自出現幾次
        for a in A:
            cnt[a] = cnt[a] + 1
        # 找眾數數量P
        P = max(cnt)
        print(P, end = " ")
        A.sort() #  由小排到大
        print(A[2], end = "") # 從最大數字輸出

        for idx in range(1, -1, -1):
            if A[idx+1] != A[idx]: # 輸出不重複的數字
                print(" " + str(A[idx]), end="")        
        print()
    except EOFError:
        break


高中生程式解題系統:e621: 1. 免費停車 (Free Parking)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.

題目連結 https://zerojudge.tw/ShowProblem?problemid=e621

想法:
  1. 用一個變數 hasFree 來記錄是否有免費停車位。
  2. 用迴圈來處理 大於A、小於B。
  3. 用取餘數運算子 % 與 if 來判斷是否被 C 整除。

C++ 參考程式碼
#include <iostream>
using namespace std;

int main()
{
  int N; // 幾天放送優惠
  cin >> N;
  int a, b, c;

  while(N--) {
    cin >> a >> b >> c;
    bool hasFree = false; // 是否有免費停車位
 
    for(int idx = a + 1; idx < b; idx++) { // 大於a、小於b
      if( idx % c != 0) { // 不被 c 整除
        if(hasFree) cout << " ";  // 因為已有免費車位,先輸出空白來區隔
        hasFree = true;           // 有免費車位
        cout << idx;              // 輸出車位號碼
      }
    }

    if(hasFree == false)  // 無免費車位
      cout << "No free parking spaces.";

    cout << '\n';
  }
}


Python 參考程式碼
N = int(input()) # 幾天放送優惠

while(N):
    data = input()
    hasFree = False # 是否有免費停車位
    a, b, c = list(map(int, data.split(' ')))

    for idx in range(a+1, b): # 大於a、小於b
        if( idx % c != 0 ): # 不被 c 整除
            if hasFree:
                print(end= ' ') # 因為已有免費車位,先輸出空白來區隔
            print(idx, end = "") # 輸出車位號碼
            hasFree = True # 有免費車位
   
    if(hasFree == False): # 無免費車位
        print("No free parking spaces.", end = "")
    print()
    N = N - 1


程式設計營隊資料

0. 線上視訊網址:





1. Compute IT 闖關網址 https://compute-it.toxicode.fr/
right 右 →
left 左 ←
up 上 ↑
down 下 ↓
repeat 重複
if 如果
else 否則
while 當
again 再一次


2. Silent Teacher Python