解题思路

这是一个数字统计问题,需要统计输入数字中负数的个数,并计算所有非负数的平均值。

关键点

  1. 数据范围:

    • 输入个数:
    • 数值范围:
  2. 处理要求:

    • 统计负数个数
    • 计算非负数平均值(保留一位小数)
    • 如果没有非负数,平均值输出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}")

算法及复杂度

算法分析

  1. 统计过程:

    • 遍历输入的每个数字
    • 统计负数个数
    • 累加非负数之和并统计个数
  2. 输出处理:

    • 输出负数个数
    • 计算并输出非负数平均值
    • 注意处理无非负数的特殊情况

复杂度分析

  • 时间复杂度: - 其中 是输入数字的个数,需要遍历一次
  • 空间复杂度: - 只需要几个变量存储计数和求和结果