蓝桥杯(java)-day02
一、字母数
蓝桥杯-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); //满足条件的值会取两次
}
}