若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。
If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.
題目說明
給三個介於 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。
想法:
C++ 程式碼
Python 程式碼
先輸出一個正整數 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。
想法:
- 將輸入的數字記錄在陣列A。
- 用陣列或串列cnt紀錄數字 1 ~ 9 各自出現幾次。找次數陣列cnt中的次數最大值。
- 依次數值對陣列A由小排到大。
- 對陣列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