Day2
第一题
第四届2013年蓝桥杯省赛
排它平方数
【#|蓝桥杯31天冲刺打卡题解(Day2)】C++A组第二题
填空题
暴力
利用了排序,及循环标签的使用技巧,循环标签的使用可参考 快递e栈(控制台简易版)——异常处理 的文末。
暴力枚举每一位判断。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
outer: // 循环标签
for (int i = 203891;
i < 987654;
i++) { // 根据每一位不相同 且数字是6位数写出i的区间
String num = String.valueOf(i);
char[] arr = num.toCharArray();
Arrays.sort(arr);
// 排序过后,相同数字必定挨在一起
for (int j = 0;
j < arr.length - 1;
j++) {
if (arr[j] == arr[j + 1]) continue outer;
// 返回到最外层for循环
}long i_pow = (long)i * i;
// 记录i*i
String pow_number = String.valueOf(i_pow);
char[] arr_pow = pow_number.toCharArray();
for (int j = 0;
j < arr_pow.length;
j++) {
for (int k = 0;
k < arr.length;
k++) {
if (arr_pow[j] == arr[k]) continue outer;
// 返回到最外层for循环
}
}
System.out.print(i);
}
}
}
第二题 第四届2013年蓝桥杯省赛
买不到的数目
题解在我之前写的文章的第一题: 蓝桥杯AcWing学习笔记 3-1数学的学习
三种方法,写的很详细,暴力枚举,打表找规律,数学公式都有写。
第三题 第十一届2020年蓝桥杯省赛
回文日期
C++B组第7题
模拟
按照题意模拟即可。
import java.util.Scanner;
public class Main {
static int[] days = new int[]{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int flag = 0;
// date的范围可以不写 如果写的话一定要写成99999999 题里的89991231是n的范围而不是我们求回文日期的范围
for (int date = n + 1;
date <= 99999999;
date++) {
if (!check_valid(date)) continue;
// 非法
if (flag == 0 && check_palindrome(date)) { // 找到下一个回文日期
System.out.println(date);
flag = 1;
}
if (check_AB(date)) { // 找到AB型的回文日期
System.out.println(date);
break;
}
}
}// 判断日期是否回文
private static boolean check_palindrome(int date) {
String str = Integer.toString(date);
StringBuffer sb = new StringBuffer(str.substring(4));
if (str.startsWith(sb.reverse().toString())) {
return true;
}
return false;
}// 判断日期是否为AB型回文串
private static boolean check_AB(int date) {
String str = Integer.toString(date);
char[] arr = str.toCharArray();
int a = str.charAt(0), b = str.charAt(1);
if(a == b) return false;
return arr[2] == a && arr[5] == a && arr[7] == a && arr[3] == b && arr[4] == b && arr[6] == b;
}// 判断日期是否合法
private static boolean check_valid(int date) {
int year = date / 10000;
int month = date % 10000 / 100;
int day = date % 100;
if (month == 0 || month > 12) return false;
// 判断平年
if (day == 0 || month != 2 && day > days[month]) return false;
// 判断闰年
if (month == 2) {
int leap = 0;
// 0表示平年 1表示闰年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) leap = 1;
if (day > 28 + leap) return false;
}
return true;
}
}
第四题 第九届2018年蓝桥杯国赛
约瑟夫环
C++A组第4题
递推
f[i]
表示有i
个人参加游戏时,出局人的编号。当有人报数到
k
时,此时人数-1,那么问题就转变成有i - 1
个人参加游戏,下一个报数的人即为f[i - 1]
。原编号与新编号相差
k
,所以f[i] = f[i - 1] + k
,但我们不能超过i
,我们还要%i
取余。import java.util.Scanner;
public class Main {
static final int N = 1000010;
static int[] f = new int[N];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
for (int i = 1;
i <= n;
i++) f[i] = (f[i - 1] + k) % i;
System.out.print(f[n] + 1);
// 编号从1开始 所以要+1
}
}
推荐阅读
- 蓝桥杯|蓝桥杯AcWing学习笔记 6-1双指针的学习(附相关蓝桥真题(日志统计、完全二叉树的权值))
- #|蓝桥杯31天冲刺打卡题解(Day3)
- #|蓝桥杯31天冲刺打卡题解(Day1)
- angularjs|安装angularjs及idea导入angularjs项目
- 鸿蒙|鸿蒙开发工具DevEco Studio如何切换黑色界面
- python|OSChina 周四乱弹 ——孩子是自己的就好
- 前端|OSChina 周六乱弹 —— 我有必须离开的理由!再见了 咸鱼们!
- Spring Boot 如何统计、监控 SQL 运行情况(写得太好了。。。)
- 网络|这10本硬核技术书,带你读懂5G、物联网和边缘计算,玩转元宇宙