蓝桥杯(java)-day02

蓝桥杯(java)-day02


蓝桥杯(java)-day01

一、字母数

蓝桥杯-2023省赛模拟题-字母数
问题描述
请找到一个大于 20222022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 00)都为字母(AA 到 FF)。

请将这个数的十进制形式作为答案提交。

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

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M。

解题思路

这个题较为简单,直接暴力

解题答案

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
       for(int i=2020;;i++) {
            if(check(i)) {
                System.out.println(i);
                return;
            }
        }        
    }
    public static boolean check(int i) {
        // TODO Auto-generated method stub
        String sixteen=Integer.toHexString(i);
        char[] arr=sixteen.toCharArray();
        for(char c:arr) {
            if(c>='a'&&c<='z') {
                continue;
            }
            else
                return false;
        }
        return true;
    }
}

二、特殊日期

蓝桥杯-2023省赛模拟题-特殊日期
问题描述
对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 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

解题思路

这题比较简单,直接暴力输出,我这里为了复习Calendar类,用Calendar写的。注意Calendar类中月份是从0开始计数的,也就是0表示为1月
其次,Calendar中Calender.DAY_OF_WEEK是从星期日开始计算,也就是说星期一输出为2

解题答案

import java.util.Scanner;
import java.util.Calendar;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
         Calendar olddate = Calendar.getInstance();
        olddate.set(1900, 0, 1);
        int count=0;
        for(;;) {
            int year=olddate.get(Calendar.YEAR);
            int month=olddate.get(Calendar.MONTH)+1;
            int day=olddate.get(Calendar.DAY_OF_MONTH);
            int res1=f(year);
            int res2=f(month)+f(day);
            if(year==9999&&month==12&&day==31)
                break;
            if(res1==res2) {
                count++;
            }
            olddate.add(Calendar.DATE,1);
            
        }
        System.out.println(count);
    }

    private static int f(int num) {
        // TODO Auto-generated method stub
         int sum=0;
            while(num!=0){
                sum = sum + num%10;
                num = num/10;
            }
        return sum;
    }
}

二、大乘积

蓝桥杯-2023省赛模拟题-特殊日期
问题描述
小蓝有 3030 个数,分别为:99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 。

小蓝可以在这些数中取出两个序号不同的数,共有 30\times 29/2=43530×29/2=435 种取法。

请问这 435435 种取法中,有多少种取法取出的两个数的乘积大于等于 20222022 。

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

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

解题思路

这里需要注意一下 同样的两个数通过双重遍历可能取两次,如a*b=c和b*a=c一个意思,所以最后答案都需要除以2,同时注意取的是不同的两个数.

解题代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
   public static void main(String[] args) {
    int[] arr= {99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77};
            int count=0;
            for(int i=0;i<arr.length;i++) {
                for(int j=0;j<arr.length;j++) {
                    if(i==j) {  //b不能是同一个数,但是可以是不同位置值相同的2个数
                        continue;
                    }
                    else {
                        if(arr[i]*arr[j]>=2022)
                        {count++;}
                    }
                }
            }
            System.out.println(count/2);  //满足条件的值会取两次
        }
    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

头发还不秃的秃头程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值