解题思路
这是一个数字统计问题,需要统计输入数字中负数的个数,并计算所有非负数的平均值。
关键点
-
数据范围:
- 输入个数:
- 数值范围:
- 输入个数:
-
处理要求:
- 统计负数个数
- 计算非负数平均值(保留一位小数)
- 如果没有非负数,平均值输出0.0
代码
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int num;
int negCount = 0; // 负数个数
int posCount = 0; // 非负数个数
double posSum = 0; // 非负数之和
while (cin >> num) {
if (num < 0) {
negCount++;
} else {
posCount++;
posSum += num;
}
}
cout << negCount << endl;
if (posCount == 0) {
cout << "0.0" << endl;
} else {
cout << fixed << setprecision(1) << posSum / posCount << endl;
}
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int negCount = 0; // 负数个数
int posCount = 0; // 非负数个数
double posSum = 0; // 非负数之和
while (sc.hasNextInt()) {
int num = sc.nextInt();
if (num < 0) {
negCount++;
} else {
posCount++;
posSum += num;
}
}
System.out.println(negCount);
if (posCount == 0) {
System.out.println("0.0");
} else {
System.out.printf("%.1f%n", posSum / posCount);
}
}
}
neg_count = 0 # 负数个数
pos_count = 0 # 非负数个数
pos_sum = 0 # 非负数之和
while True:
try:
num = int(input())
if num < 0:
neg_count += 1
else:
pos_count += 1
pos_sum += num
except:
break
print(neg_count)
if pos_count == 0:
print("0.0")
else:
print(f"{pos_sum/pos_count:.1f}")
算法及复杂度
算法分析
-
统计过程:
- 遍历输入的每个数字
- 统计负数个数
- 累加非负数之和并统计个数
-
输出处理:
- 输出负数个数
- 计算并输出非负数平均值
- 注意处理无非负数的特殊情况
复杂度分析
- 时间复杂度:
- 其中
是输入数字的个数,需要遍历一次
- 空间复杂度:
- 只需要几个变量存储计数和求和结果