P5719 【深基4.例3】分类平均---Java

题目描述

给定 n(n≤10000)n(n\le10000)n(n≤10000) 和 k(k≤100)k(k\le 100)k(k≤100),将从 1 到 nnn 之间的所有正整数可以分为两类:A 类数可以被 kkk 整除(也就是说是 kkk 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 1 位,用空格隔开。
输入格式

无
输出格式

无
输入输出样例
输入 #1

100 16

输出 #1

56.0 50.1
//这是一道比较如意出错的题,可能在编译器上得出了正确答案,
//可是在提交之后并不一定能满分,因为k=1的情况容易忽略,
//我也是弄了半个多钟才发现,如果是比赛,估计就直接忽略了,只能得40分。
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Scanner;
public class P5719 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int flag1=0,flag2=0;
        float sum1 =0;
        float sum = n*(n+1)/2;
        if (k==1){   //k=1的情况要单独列出来,因为按照下面的算法,k=1时会出现分母为0的情况。
            DecimalFormat df = new DecimalFormat("#0.0");
            System.out.print(df.format(sum/n)+" "+"0.0");
            return;
        }
        for (int i=1;i<=n;i++){
            if (i%k==0){
                sum1+=i;
                flag1++;
            }
        }
        //System.out.println(sum1+" "+sum+" "+flag1+" ");
        DecimalFormat df = new DecimalFormat("#0.0");
        System.out.print(df.format(sum1/flag1)+" "+df.format((sum-sum1)/(n-flag1)));
    }
}

你可能感兴趣的:(洛谷,java)