笔试编程题(二)

(一)题目描述:

输入一个日期,判断日期是当年的第几天

分析:

首先确定一下几点:

  • 年份有平年有闰年,闰年的计算方式:(是 400 的倍数)||(能被 4 整除 && 不能被 100 整除)
  • 闰年与平年的差别在于 2 月份:闰年 29 天,平年 28 天
    知道以上两点后,只需要累加和就可以求出是该年的第几天了。

代码:

	public static void main(String args[]) throws IOException {
        int days[] = {31,29,31,30,31,30,31,31,30,31,30,31}; // 闰年
        int days2[] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 平年
        // 从控制台中读取数据
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String date[];
        while (true){
            int sum = 0;
            // 切割接收的字符串并存入数组
            date = br.readLine().trim().split(" +");
            if((Integer.parseInt(date[0]) % 400 == 0) || ((Integer.parseInt(date[0]) % 4 == 0) && (Integer.parseInt(date[0]) % 100 != 0))){
                for (int i = 0; i < Integer.parseInt(date[1]) - 1; i++){
                    System.out.println("日期:" + days[i]);
                    sum += days[i];
                }
                sum += Integer.parseInt(date[2]);
            }else{
                for (int i = 0; i < Integer.parseInt(date[1]) - 1; i++){
                    System.out.println("日期:" + days2[i]);
                    sum += days2[i];
                }
                sum += Integer.parseInt(date[2]);
            }
            System.out.println(sum);
        }
    }

结果展示:

在这里插入图片描述


(二)题目描述:

判断给定区间内的回文素数的个数

分析:

判断回文素数需要知道一下几点:

  • 回文数是指:给定一个整数,它倒读还等于它本身的数。例如:121、1331、25352……
  • 素数(质数)是指:给定一个大于 1 (1和0不是素数)的素数,除了 1 和它本身,不能被其他自然数整除的数。

代码:

	// 判断是否为素数
    public static boolean isPrime(int num){
        if( num <= 3){
            return num > 1;
        }
        int sqrt = (int) Math.sqrt(num);
        for (int i = 2; i <= sqrt; i++){
            if(num % i == 0){
                return false;
            }
        }
        return true;
    }

    // 判断是否为回文数
    public static boolean isPalindrome(int num){
        String str = String.valueOf(num);
        final StringBuilder sb = new StringBuilder(str);
        if (sb.reverse().toString().equals(str)){
            return true;
        }
        return false;
    }

    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        int min = sc.nextInt();
        int max = sc.nextInt();
        int count = 0;
        for (int i = min; i <=max; i++){
        // 可以将这一句解开注释,具体看一下范围内的数的情况
//            System.out.println(isPrime(i) + " " + isPalindrome(i) + " " + i);
            if(isPrime(i) && isPalindrome(i)){
                count++;
            }
        }
        System.out.println("给定范围内的回文素数有:" + count + "个");
    }

结果展示

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值