Java题解—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。
代码
package pat;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int case0=0,case1=0,case2=0,case3=0,case4=0;//接收每种情况的结果
boolean flag0=false,flag1=false,flag2=false,flag3=false,flag4=false;//标志某类数字是否存在
int count=0;
int massage1=0;
//条件判断
for (int i=0;i<N;i++){
int num = scanner.nextInt();
switch (num%5){
case 0:if (num%2==0){
case0+=num;
flag0=true;
}
break;//注意,break要放if外面,才能跳出switch
case 1:
massage1++;//计数用来交叉求和。因为奇数是加,偶数是减
if (massage1%2==0){
case1-=num;
}else {
case1+=num;
}
flag1=true;
break;
case 2:case2++;flag2=true;break;
case 3:
case3+=num;
flag3=true;
count++;
break;
case 4:
if (num>case4){
case4=num;
flag4=true;
}
break;
}
}
//输出
Object o;//注意:三元运算符与if不同的是,必须有一个变量来承载后面表达式的结果
o=flag0 ? System.out.printf(case0+" "):System.out.printf("N ");
o=flag1 ? System.out.printf(case1+" "):System.out.printf("N ");
o=flag2 ? System.out.printf(case2+" "):System.out.printf("N ");
double average=(double)case3/count;
o=flag3 ? System.out.printf("%.1f",average):System.out.printf("N") ;
o=flag4 ? System.out.printf(" "+case4):System.out.printf(" N");
}
}