跳转地址
给定一系列正整数,请按要求对数字进行分类,并输出以下 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"); } }