华为机试-105-简单-HJ105.记负均正II
一、描述
输入 n 个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0
本题有多组输入数据,输入到文件末尾。
1.1、输入描述
输入任意个整数,每行输入一个。
1.2、输出描述
输出负数个数以及所有非负数的平均值
二、示例
2.1、示例1
输入:
-13
-4
-7
输出:
3
0.0
2.2、示例2
输入:
-12
1
2
输出:
1
1.5
三、答案(java)
3.1、方法一
package com.tzq.hwod;
import java.util.Scanner;
//注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int temp = 0;
int countN = 0;
int countP = 0;
double sum = 0.0;
while (in.hasNextInt()) { // 注意 while 处理多个 case
temp = in.nextInt();
if (temp < 0) {
countN++;
} else if (temp > 0) {
countP++;
sum += temp;
}
}
System.out.println(countN);
if (countP == 0) {
System.out.printf("0.0");
} else {
System.out.printf("%.1f\n", sum / countP);
}
}
}
四、答案(python 3)
4.1、方法一
这个题需要注意对文件结束的处理。以往的题目都是有确定数量的输入,可以在try里按既定数量获取input(),这一题是不定长的输出,只能判断文件结束符。方法见except
#!/usr/bin/python
# -*- coding: UTF-8 -*-
lst=[]
while True:
try:
lst.append(int(input()))
except:
break
fu=[]#负数
zn=[]#正数
for i in lst:
if i<0:
fu.append(i)
else:
zn.append(i)
#print(fu,zn)#测试用
print(len(fu))#打印负数个数
if len(zn)==0:
print(0.0)
else:
print(format(sum(zn)/len(zn),'.1f'))#format用法也要学会
#print(round(sum(zn)/len(zn),1))#最好不要用round