寒假冬令营(算法编程)1月2日(模拟)

文章讲述了编程问题,涉及计算一次考试的最高分、最低分和平均分,以及在特定日期范围内找出满足年、月、日数位数字和相等条件的日期总数,使用Java语言实现。
摘要由CSDN通过智能技术生成

题目描述(1)

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。

请计算这次考试的最高分、最低分和平均分。

输入描述

输入的第一行包含一个整数 n(1≤n≤104)n (1≤n≤104),表示考试人数。

接下来 n行,每行包含一个 0 至 100 的整数,表示一个学生的得分。

输出描述

输出三行。

第一行包含一个整数,表示最高分。

第二行包含一个整数,表示最低分。

第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。

输入输出样例

示例

输入

7
80
92
56
74
88
99
10

输出

99
10
71.29
运行限制
  • 最大运行时间:1s

  • 最大运行内存: 256M

解题结果

Java

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
​
        // 读取考试人数
        int n = scan.nextInt();
​
        // 初始化最高分和最低分为可能的最小和最大值
        int maxScore = Integer.MIN_VALUE;
        int minScore = Integer.MAX_VALUE;
​
        // 初始化总分
        int totalScore = 0;
​
        // 循环读取每个学生的得分
        for (int i = 0; i < n; i++) {
            int score = scan.nextInt();
​
            // 更新最高分和最低分
            maxScore = Math.max(maxScore, score);
            minScore = Math.min(minScore, score);
​
            // 累加总分
            totalScore += score;
        }
​
        // 计算平均分
        double averageScore = (double) totalScore / n;
​
        // 输出结果
        System.out.println(maxScore);
        System.out.println(minScore);
        System.out.printf("%.2f%n", averageScore);
​
        scan.close();
    }
}

题目描述(2)

对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 19001900 年 11 月 11 日至 99999999 年 1212 月 3131 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。

例如,20222022 年 1111 月 1313 日满足要求,因为 2+0+2+2=(1+1)+(1+3)2+0+2+2=(1+1)+(1+3) 。

请提交满足条件的日期的总数量。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

运行限制

  • 最大运行时间:1s

  • 最大运行内存: 256M

解题结果

Java

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
​
        int count = 0;
​
        // 遍历日期范围从 1900 年 11 月 11 日至 9999 年 12 月 31 日
        for (int year = 1900; year <= 9999; year++) {
            for (int month = 1; month <= 12; month++) {
                for (int day = 1; day <= 31; day++) {
                    // 检查是否为有效日期
                    if (isValidDate(year, month, day)) {
                        // 计算年、月、日的数位数字之和
                        int yearDigitSum = calculateDigitSum(year);
                        int monthDigitSum = calculateDigitSum(month);
                        int dayDigitSum = calculateDigitSum(day);
​
                        // 检查是否满足条件
                        if (yearDigitSum == monthDigitSum + dayDigitSum) {
                            count++;
                        }
                    }
                }
            }
        }
​
        // 输出结果
        System.out.println(count);
​
        scan.close();
    }
​
    // 判断是否为有效日期
    private static boolean isValidDate(int year, int month, int day) {
        if (month < 1 || month > 12 || day < 1 || day > 31) {
            return false;
        }
​
        if ((month == 4 || month == 6 || month == 9 || month == 11) && day > 30) {
            return false;
        }
​
        if (month == 2) {
            if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
                return day <= 29;
            } else {
                return day <= 28;
            }
        }
​
        return true;
    }
​
    // 计算数位数字之和
    private static int calculateDigitSum(int num) {
        int sum = 0;
        while (num > 0) {
            sum += num % 10;
            num /= 10;
        }
        return sum;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pedestrians74

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值