首页 > 试题广场 >

日历中的数字

[编程题]日历中的数字
  • 热度指数:53 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
ElemenT马上就要毕业了,他打开日历看了看时间。发现日历上的日期都是2017-04-04这样的格式的,月和日如果不足2位数,前面都会补充0。
给定一个年份和月份,ElemenT把那个月的日期都按上述格式写到纸上,他现在想知道某种数字出现了多少次。

输入描述:
多组输入
每组输入一行,有3个数字y,m,x(1000<=y<=3000,1<=m<=12,0<=x<=9),分别代表年份,月份,和他想知道哪个数字出现的次数。


输出描述:
每组输出一个整数,表示数字x在这个月的日期里出现了多少次。
示例1

输入

2017 4 4
2000 1 0

输出

33
136

说明

第一组样例中,日中有数字4的为2017-04-04,2017-04-14,2017-04-24,4月一共有30天,因为月份中有4,所以数字4一共出现了30 + 3 = 33次   
这***题目,输入的测试用例,说的是一行一行的,实际是一起输入的,什么玩意?
思路:使用java的Calendar处理一行一行的数据
import java.util.Calendar;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //处理输入
        Scanner sc = new Scanner(System.in);
        while (true) {
            String oneLine = sc.nextLine();
            if (oneLine.equals("")) {
                return;
            }
            String[] dateStringArray = oneLine.split(" ");
            int year = Integer.parseInt(dateStringArray[0]);
            int month = Integer.parseInt(dateStringArray[1]);
            char targetChar = (char) ('0' + Integer.parseInt(dateStringArray[2]));

            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.YEAR, year);
            calendar.set(Calendar.MONTH, month, 1);
            //比如4月,这里就得到了4月的最后一天。再得到本月的天数
            calendar.add(Calendar.DATE, -1);
            //得到本月的天数
            int dayCount = calendar.get(Calendar.DAY_OF_MONTH);

            //统计年份的含量
            int resYear = 0;
            String yearString = "" + year;
            for (int i = 0; i < yearString.length(); i++) {
                if (yearString.charAt(i) == targetChar) {
                    resYear++;
                }
            }
            resYear = resYear * dayCount;

            //统计月份的含量
            int resMonth = 0;
            String monthString = "";
            if (month < 10) {
                monthString = "0" + month;
            } else {
                monthString = monthString + month;
            }
            for (int i = 0; i < monthString.length(); i++) {
                if (monthString.charAt(i) == targetChar) {
                    resMonth++;
                }
            }
            resMonth = resMonth * dayCount;

            //统计天数的含量
            int resDay = 0;
            String dayString = "";
            for (int i = 1; i < dayCount; i++) {
                //如果当前日期是小于10的,需要在前面拼接一个0
                if (i < 10) {
                    dayString = "0" + i;
                } else {
                    dayString = "" + i;
                }
                for (int j = 0; j < dayString.length(); j++) {
                    if (dayString.charAt(j) == targetChar) {
                        resDay++;
                    }
                }
            }

            //结果是三者的和
            int res = resYear + resMonth + resDay;
            System.out.println(res);

        }
    }
}




发表于 2021-09-11 19:33:09 回复(0)

问题信息

上传者:牛客301599号
难度:
1条回答 2953浏览

热门推荐

通过挑战的用户