题目的主要信息:
- 输入n个数字,求其中负数的个数与所有正整数的平均值,结果保留一位小数
- 0即不是正整数,也不是负数,不计入计算
(本题过于简单,无方法二,用两种语言解决)
语言一:C++
具体做法:
对于输入的个数字,判断其是否小于0,如果是负数则统计次数,再判断是否大于0,如果是正数则统计正数出现次数并累加和。
最后输出之前先验证正数出现的次数是否等于0,再取平均值。
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int n; //统计输入的总数
while(cin >> n){
int val;
int count1 = 0; //统计负数个数
int count2 = 0; //统计正数个数
double sum = 0; // 统计正数和
for(int i = 0; i < n; i++){
cin >> val;
if(val < 0) //遇到负数统计个数
count1++;
else if(val > 0){ //遇到正数统计个数且累加和
count2++;
sum += val;
}
}
cout << count1 << " ";
if(count2 == 0) //没正整数
cout << "0.0" << endl;
else{
cout.setf(ios::fixed); //不足位自动补齐
cout << fixed << setprecision(1) << sum / (double)(count2) << endl; //计算均值
}
}
return 0;
}
复杂度分析:
- 时间复杂度:,一次遍历输入即可
- 空间复杂度:,常数级空间
语言二:Python
具体做法:
我们用空格间隔开个数字,然后将正负数分别从输入的个数字中筛选出来,最后求平均值,以及统计负数数组的个数即可。
while True:
try:
n = int(input())
line = list(map(int, input().split())) #用空格分开数字
minus = [i for i in line if i < 0] #统计负数
plus = [i for i in line if i > 0] #统计正数
avg = round(sum(plus) / len(plus), 1) #求和出总数
print(len(minus), end=(" "))
print("%.1f" % avg)
except:
break
复杂度分析:
- 时间复杂度:,分割数字查找正负数都是
- 空间复杂度:,辅助数组空间大小最坏为