week2-[循環結構]找出正數
題目描述
給定 NNN 個整數A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN?。請求出這 NNN 個數中有多少個數是正數,并求出這些正數的平均值。如果 A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN? 不存在正數,那么輸出 “None”(輸出時不需要輸出引號)。
輸入格式
讀入包括 222 行。第一行只有 111 個整數 NNN,表示數的個數。第二行包括 NNN 個整數 A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN?。
輸出格式
輸出只有 111 行。如果 A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN? 不存在正數,那么輸出 “None”(輸出時不需要輸出引號)。如果A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN? 存在至少一個正數,那么輸出用恰好一個空格隔開的 222 個數,第一個數表示正數的個數,第二個數表示正數的平均值(正數的平均值四舍五入保留 333 位小數輸出)。
樣例 #1
樣例輸入 #1
5
-5 -3 0 -8 -100
樣例輸出 #1
None
樣例 #2
樣例輸入 #2
6
5 -2 8 3 -4 1
樣例輸出 #2
4 4.250
樣例 #3
樣例輸入 #3
5
1 2 3 4 5
樣例輸出 #3
5 3.000
提示
樣例解釋1
?5,?3,0,?8,?100-5,-3,0,-8,-100?5,?3,0,?8,?100 中不存在正數,根據題目要求輸出 “None”。
樣例解釋2
5,?2,8,3,?4,15,-2,8,3,-4,15,?2,8,3,?4,1 中的正數為 5,8,3,15,8,3,15,8,3,1 這 444 個數,因此輸出正數的個數 444 與正數的平均值 5+8+3+14=4.250\dfrac{5+8+3+1}{4}=4.25045+8+3+1?=4.250。
樣例解釋3
1,2,3,4,51,2,3,4,51,2,3,4,5 中所有數都是正數,因此輸出正數的個數 555 與正數的平均值 1+2+3+4+55=3.000\dfrac{1+2+3+4+5}{5}=3.00051+2+3+4+5?=3.000。
數據范圍
對于所有數據,1≤N≤100,?10000≤A,B≤100001 \le N \le 100, -10000 \le A,B \le 100001≤N≤100,?10000≤A,B≤10000。
1. 閱讀題目
- 輸入:
- 第 1 行:整數 NNN(表示有多少個數)。
- 第 2 行:NNN 個整數 A1,A2,…,ANA_1,A_2,\ldots,A_NA1?,A2?,…,AN?。
- 輸出:
- 如果沒有正數 → 輸出
"None"
。 - 如果有正數 → 輸出兩個數:
- 正數的個數
- 正數的平均值(四舍五入保留 3 位小數)
- 如果沒有正數 → 輸出
2. 分析問題
- 遍歷所有 NNN 個數:
- 統計正數的數量
cnt
- 累加正數的和
sum
- 統計正數的數量
- 判斷:
- 如果
cnt == 0
→ 輸出"None"
- 否則 → 輸出
cnt
和平均值 = sum / cnt
- 如果
- 平均值需要 四舍五入保留 3 位小數:
- 在 C++ 中可以用
cout << fixed << setprecision(3)
來處理。
- 在 C++ 中可以用
- 時間復雜度 O(N)O(N)O(N),空間復雜度 O(1)O(1)O(1)。
3. C++ 代碼實現
#include <iostream>
#include <iomanip>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(NULL);int N;cin >> N;int cnt = 0; // 正數個數long long sum = 0; // 正數和(防止溢出,雖然題目范圍也不會溢出)for (int i = 0; i < N; i++) {int x;cin >> x;if (x > 0) {cnt++;sum += x;}}if (cnt == 0) {cout << "None\n";} else {double avg = (double)sum / cnt;cout << cnt << " " << fixed << setprecision(3) << avg << "\n";}return 0;
}
? 總結:
- 用循環統計 →
cnt
和sum
。 - 分支判斷 → 有正數輸出結果,沒有輸出
"None"
。 - 平均值格式化 →
fixed << setprecision(3)
保留 3 位小數。