题目主要信息
1、输入n个整型数,统计其中负数的个数
2、求出非负数的平均值,结果保留一位小数
3、有多组输入数据
方法一:暴力直接求解
具体做法
直接对输入数据一遍记录有多少负数,并把非负数进行存储,并进行求平均值。
Java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0;//记录有多少个负数
int count1 = 0;//记录有多少个非负
float sum = 0;//求非负数的和
while (sc.hasNextInt()){
int number = sc.nextInt();
if (number >= 0){
count1++;
sum += number;
}else{
count++;
}
}
System.out.println(count);
System.out.printf("%.1f\n", sum/count1*1.0);
}
}
复杂度分析:
- 时间复杂度:,直接遍历每一个。
- 空间复杂度:,只用了常数空间存储个数和平均值。
方法二:借助数组保存
具体方法
将输入的整数存入数组中,并对数组进行计算。
Java代码
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int count = 0;//记录有多少个负数
int count1 = 0;//记录有多少个非负
float sum = 0;//求非负数的和
ArrayList<Integer> temp = new ArrayList<>();
while (sc.hasNextInt()){
int number = sc.nextInt();
temp.add(number);
}
System.out.println(count(temp));
System.out.printf("%.1f\n", sum(temp));
}
//计算有多少负数
public static int count(ArrayList<Integer> temp){
int count = 0;//记录有多少小于0的
for (Integer integer : temp) {
if(integer < 0){
count++;
}
}
return count;
}
//求平均值
public static float sum(ArrayList<Integer> temp){
float sum = 0;
int count = 0;
for (Integer integer : temp) {
if(integer>0){
sum+=integer;
count++;
}
}
return (float) (sum*1.0/count*1.0);
}
}
复杂度分析:
- 时间复杂度:,需要遍历一遍所有整数。
- 空间复杂度:, 一个临时数组temp