HJ97 题解 | #记负均正#
题意分析
- 给一个数组,需要找到这个数组里面的负数的个数和正数的平均数。
思路分析
- 直接模拟即可。我们遍历这个数组,如果是正数,那么用一个变量sum统计,同时累加个数,如果是负数,那么就只要累加负数,最后即可得到最后的结果。这里求正数的平均数的时候要注意的是除数为0的情况,不然可能出现段错误。
C++
- 代码如下
- 需要遍历整个数组,时间复杂度为O(n)
- 只用了少数几个变量进行求解,空间复杂度为O(1)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=EOF){
// neg表示的是负数的个数,pos表示正数的个数,sum表示的是正数的和
int neg=0,sum=0,pos=0;
while(n--){
int x;
scanf("%d",&x);
if(x<0){
neg++;
}else if(x>0){
sum+=x;
pos++;
}
}
double ans=0;
// 这里要特判pos是否为0,避免段错误
if(pos){
ans=(double)sum/pos;
}
printf("%d %.1lf\n", neg, ans);
}
return 0;
}
Python
- 代码如下
- 需要遍历整个数组,时间复杂度为O(n)
- 只用了少数几个变量进行求解,空间复杂度为O(1)
while True:
try:
n=int(input())
arr=input().split()
pos=0
sum=0
neg=0
for i in range(n):
if int(arr[i])>0:
pos+=1
sum+=int(arr[i])
elif int(arr[i])<0:
neg+=1
# 特判除数为0的情况
if pos==0:
ans=0.0
else:
ans=round(sum/pos,1)
print(neg, ans)
except:
break