1012 数字分类 (20分)
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:
- A1= 能被 5 整除的数字中所有偶数的和;(情况一)
- A2= 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算n1−n2+n3−n4⋯;(情况二)
- A3= 被 5 除后余 2 的数字的个数;(情况三)
- A4= 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;(情况四)
- A5= 被 5 除后余 4 的数字中最大数字。(情况五)
输入格式:
每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数N,随后给出N个不超过 1000 的待分类的正整数。数字间以空格分隔。
输出格式:
对给定的N个正整数,按题目要求计算A1
~A5
并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出N
。
输入样例 1:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出样例 1:
30 11 2 9.7 9
输入样例 2:
8 1 2 4 5 6 7 9 16
输出样例 2:
N 11 2 N 9
题目解析:
这道题目读完就会发现,难到是不难,就是需要各种判断,所以需要有清晰的思维。详细解析看代码注释,这里我就说一点,就是A4保留小数点后一位,这里JAVA借鉴了C语言的格式,可以使用System.out.printf("%.1f ",A4);
AC代码:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int N=s.nextInt();//录入一共有多少个数
//A1代表最后的和,A2代表交错求和得到的结果,A3代表总的个数,A5代表最大数字
int A1=0,A2=0,A3=0,A5=0;
//A4代表和,count代表个数,A4/count就是平均值
float A4=0,count=0;
//由于A2交错求和不好求,所以先把数找出来放到集合中
ArrayList<Integer> list=new ArrayList<>();
for(int i=0;i<N;i++){
int num=s.nextInt();
//第一种情况
if(num%5==0&&num%2==0){
A1+=num;
}else if(num%5==1){//第二种情况
list.add(num);
}else if(num%5==2){//第三种情况
A3++;
}else if(num%5==3){//第四种情况
A4+=num;
count++;
}else if(num%5==4){//第五种情况
if(num>A5){
A5=num;
}
}
}
//如果A1=0,说明没有满足情况一的数字,就输出N
if(A1==0){
System.out.print("N ");
}else{
System.out.print(A1+" ");
}
//集合长度为0,说明没有满足情况2的数字
if(list.size()==0){
System.out.print("N ");
}else{
//进行交错求和
for(int i=0;i<list.size();i++){
if(i%2==0){
A2+=list.get(i);
}else{
A2-=list.get(i);
}
}
System.out.print(A2+" ");
}
//情况三
if(A3==0){
System.out.print("N ");
}else{
System.out.print(A3+" ");
}
//情况四
if (count == 0) {
System.out.print("N ");
}else{
System.out.printf("%.1f ",A4/count);
}
//情况5,最后没有空格
if(A5==0){
System.out.print("N");
}else{
System.out.print(A5);
}
}
}