问题描述:
给定整数正整数,请按要求对数字进行分类,并输出以下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
输出
30 11 2 9.7 9
分析:
这个解题步骤就按题目要求来求就行了。
A1:先找到能被5整除的,在判断他是否能被2整除,能整除就说明他是偶数,反之就不符合要求。
A2:这个地方牵扯到加减交替运行的,所以需要用一个临时变量tmp,首先给他赋初值为1(因为运算中第一个是正号,即乘的是1),当把 tmp*a 的值加到A2中后,tmp = (-1) * tmp(这一块就实现了第二个为负数,等到第三个数的时候,tmp又为1,故实现了加减交替)。
A3:如果满足除5余2,那么A3就加一,遍历完就行了。
A4:首先要记录下满足除5余3的所有数的和存在A4中以及一共有多少个数存在n中,最后输出 A4/n。
注意:1. 定义A4时用 float 定义
2.输出时要求只有一位小数,可以用%.1f 来满足要求。(如果这个条件没满足,测试用例不会完全通过)
A5:首先给A5赋初始值0,如果有满足除5余4并且同时满足比A5值大的数,就把这个数赋给A5。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int N = in.nextInt();
int [] s = new int[N];
for(int i =0;i<N ;i++){
s[i] = in.nextInt();
}
int a1 = 0;
int a2 = 0;
int a3 = 0;
double a4 = 0;
int a5 = 0;
boolean flag = false;//a2
int tmp = 1;
int n = 0;//a4
for(int i = 0;i<s.length;i++){
int a = s[i];
//a1
if( a % 5 == 0 && a % 2 ==0 ){
a1 += a;
}
//a2
if(a % 5 == 1 ){
flag = true;
a2 += tmp * a;
tmp = (-1) * tmp;
}
//a3
if(a % 5 == 2){
a3++;
}
//a4
if(a % 5 == 3){
a4 += a;
n ++;
}
//a5
if(a % 5 == 4 ){
if(a5 < a){
a5 = a;
}
}
}
if(a1 == 0){
System.out.print("N" + " ");
}else{
System.out.print(a1 +" ");
}
if(flag){
System.out.print(a2 +" ");
}else{
System.out.print("N" + " ");
}
if(a3 == 0){
System.out.print("N" + " ");
}else{
System.out.print(a3 +" ");
}
if(n == 0){
System.out.print("N" + " ");
}else{
System.out.printf("%.1f ",a4/n);
}
if(a5 == 0){
System.out.print("N");
}else{
System.out.print(a5);
}
}
in.close();
}
}