PAT乙级(Basic Level)真题1002-数字分类

    /**
     * 题目:给定一系列正整数,请按要求对数字进行分类,并输出以下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的待分类的正整数。数字间以空格分隔。
     * @param args
     */

import java.math.BigDecimal;//对小数进行格式化
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		int A1 = 0;	boolean A1F = false;//A1F是A1的flag,用来检测A1是否进行过运算
		int A2 = 0;	int A2flag = 1; boolean A2F = false;
		int A3 = 0; 
		double A4 = 0.0f; int count = 0; 
		int A5 = 0; 
		Scanner input = new Scanner(System.in);
		String s = input.nextLine();

                //字符串转String数组
                String[] str = s.split(" ");
	        
                //在这里忽略了容量N,直接从第一个数据开始拿
		for(int i=1; i < str.length; i++){
			int num = Integer.parseInt(str[i]);
			if(num % 10 == 0){
				A1 += num;
				A1F = true;
			}
			if(num % 5 == 1){
				A2 += num*A2flag;
				A2flag *= -1;
				A2F =true;
			}
			if(num % 5 == 2){
				A3++;
			}
			if(num %5 == 3){
				count++;
				A4 += num;
				//在循环外进行求和操作
			}
			if(num % 5 == 4){
				if(A5 < num){
					A5 = num;
				}
			}
		}
		//判断输出,注意输出格式
		if(A1 > 0&& A1F){
			System.out.print(A1+" ");
		}else{
			System.out.print("N ");
		}
		
		if(A2F){
			System.out.print(A2+" ");
		}else{
			System.out.print("N ");
		}
		
		if(A3 > 0){
			System.out.print(A3+" ");
		}else{
			System.out.print("N ");
		}
		
		if(count > 0){
			A4 = A4/count;
			//格式化A4,保留小数点后一位数字(四舍五入)
			BigDecimal b = new BigDecimal(A4);
			//保留1位小数
			double f1 = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); 
			System.out.print(f1 +" ");
		}else{
			System.out.print("N ");
		}
		
		if(A5 > 0){
			System.out.print(A5);
		}else{
			System.out.print("N");
		}
	}

知识点:

1.字符串转String数组

2.对小数位的处理,有时候是直接截取小数位,有时候是需要四舍五入

猜你喜欢

转载自blog.csdn.net/weixin_42615847/article/details/81030768