蓝桥杯考前两周刷题清单
时间紧迫,故训练题型皆为枚举,模拟类题,旨在暴力拿分。题单摘自英雄哪里出来抖音视频。
1.特别数的和
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static boolean is(int n) {
String s = Integer.toString(n);
int a = s.length();
for(int i = 1;i < a;i++) {
if(s.charAt(i) == '0') {
return true;
}
}
for(int i = 0;i < a;i++) {
if(s.charAt(i) == '2' || s.charAt(i) == '1' || s.charAt(i) == '9') {
return true;
}
}
return false;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int sum = 0;
for(int i = 1;i <= n;i++) {
if(is(i)) {
sum += i;
}
}
System.out.print(sum);
}
}
2.蓝桥云课2:质数
import java.util.*;
public class Main{
public static boolean is(int n) {
if(n < 2) {
return false;
}
for(int i = 2;i <= Math.sqrt(n);i++) {
if(n % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
int cnt = 0;
int n = 2;
while(cnt < 2019) {
if(is(n++)) {
cnt++;
}
}
System.out.println(n - 1);
}
}
枚举
3.蓝桥门牌制作
package lanqiao;
import java.util.*;
public class Main{
public static void main(String[] args) {
//Scanner scan = new Scanner(System.in);
//int a = scan.nextInt();
int cnt = 0;
for(int i = 1;i <= 2020;i++) {
String s = Integer.toString(i);
for(int j = 0;j < s.length();j++) {
if(s.charAt(j) == '2')
cnt++;
}
}
System.out.println(cnt);
}
}
4.卡片
import java.util.*;
public class Main{
public static void main(String[] args) {
//Scanner scan = new Scanner(System.in);
//int a = scan.nextInt();
int[] a = new int[10];
Arrays.fill(a, 2021);
for(int i = 1;i <= Integer.MAX_VALUE;i++) {
String str = String.valueOf(i);
String[] s = str.split("");
for(String x : s) {
int j = Integer.parseInt(x);
if(a[j] > 0) {
a[j]--;
}else {
System.out.println(i - 1);
return;
}
}
}
}
}
模拟
5.回文日期
import java.util.*;
public class Main{
public static boolean isLeap(int n) {
return (n % 4 == 0 && n % 100 != 0) || n % 400 == 0;
}
public static boolean isHW(int n) {
String s = String.valueOf(n);
for(int i = 0;i < s.length() / 2;i++) {
if(s.charAt(i) != s.charAt(s.length() - 1 - i)) {
return false;
}
}
return true;
}
public static boolean isHF(int year,int month,int day) {
if(month > 12 || month < 1) {//基础判定
return false;
}
if(day > 31){
return false;
}
if(month == 2) {//闰年二月判定
if(isLeap(year) && day > 29) {
return false;
}
if(!isLeap(year) && day > 28) {
return false;
}
}
if(month == 4 || month ==6 || month ==9 || month ==11) {//小月天数判定
if(day > 30) {
return false;
}
}
return true;
}
public static boolean isABABBABA(int n) {
int a = 0,b = 0,c = 0,d = 0,e = 0,f = 0,g = 0,h = 0;//八位数字
a = n / 10000000;
b = (n/1000000) % 10;
c = (n/100000) % 10;
d = (n/10000) % 10;
e = (n/1000) % 10;
f = (n/100) % 10;
g = (n/10) % 10;
h = n % 10;
return a == c && c== f && f== h && b == d && d == e && e == g;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
boolean flag = false;
for(int i = n + 1;i < 99991231;i++) {
String str = String.valueOf(i);
int year = 0,month = 0,day = 0;
year = Integer.parseInt(str.substring(0, 4));
month = Integer.parseInt(str.substring(4, 6));
day = Integer.parseInt(str.substring(6, 8));
if(isHF(year,month,day)){
if(isHW(i)&&!flag) {
System.out.println(i);
flag = true;
}
if(isABABBABA(i)) {
System.out.println(i);
break;
}
}
}
}
}
蓝桥348:回文日期
import java.util.*;
public class Main{
public static boolean isLeap(int n) {
return (n % 4 == 0 && n % 100 != 0) || n % 400 == 0;
}
public static boolean isHW(int n) {
String s = String.valueOf(n);
for(int i = 0;i < s.length() / 2;i++) {
if(s.charAt(i) != s.charAt(s.length() - 1 - i)) {
return false;
}
}
return true;
}
public static boolean isHF(int year,int month,int day) {
if(month > 12 || month < 1) {//基础判定
return false;
}
if(day > 31){
return false;
}
if(month == 2) {//闰年二月判定
if(isLeap(year) && day > 29) {
return false;
}
if(!isLeap(year) && day > 28) {
return false;
}
}
if(month == 4 || month ==6 || month ==9 || month ==11) {//小月天数判定
if(day > 30) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int y = scan.nextInt();
int cnt = 0;
for(int i = x;i <= y;i++) {
//String str = String.valueOf(i);
int year = 0,month = 0,day = 0;
year = i / 10000;
month = (i % 10000) / 100;
day = i % 100;
//year = Integer.parseInt(str.substring(0, 4));
//month = Integer.parseInt(str.substring(4, 6));
//day = Integer.parseInt(str.substring(6, 8));
if(isHF(year,month,day)){
if(isHW(i)) {
cnt++;
}
}
}
System.out.println(cnt);
}
}
蓝桥497:成绩分析
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] a = new int[n];
double sum = 0.00;
for(int i = 0;i < n;i++) {
a[i] = scan.nextInt();
sum += a[i];
}
Arrays.sort(a);
System.out.println(a[n - 1]);
System.out.println(a[0]);
System.out.printf("%.2f",sum / n);
}
}
递推
蓝桥5485:Fibonacci数列
package lanqiao;
import java.util.*;
public class Main{
public static int Fib(int n ) {
if(n == 1 || n == 2) {
return 1;
}
return Fib(n - 1) + Fib(n - 2);
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
System.out.println(Fib(n));
}
}
排序
蓝桥297:实现选择排序
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] a = new int[n];
for(int i = 0;i < n;i++) {
a[i] = scan.nextInt();
}
for(int i = 0;i < n;i++) {
int minIndex = i;
for(int j = i + 1;j < n;j++) {
if(a[j] < a[minIndex]) {
minIndex = j;
}
}
int tmp = a[minIndex];
a[minIndex] = a[i];
a[i] = tmp;
}
for(int x : a) {
System.out.print(x + " ");
}
}
}
数学
蓝桥19695:握手问题
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
int sum = 0;
for(int i = 7;i <= 49;i++){
sum += i;
}
System.out.print(sum);
}
}
蓝桥19698:报数游戏
这题我有两个思路。不过这两个思路都是在草稿纸枚举了前40个数得出来的
第1-10个: 20 24 40 48 60 72 80 96 100 120
第11-20个:140 144 160 168 180 192 200 216 220 240
第21-30个:260 264 280 288 300 312 320 336 340 360
第31-40个:380 384 400 408 420 432 440 456 460 480
思路一:发现第10个数,第20个数,第30个数,第40个数......(每十个数为一轮)等等都是120的倍数,
既然题目要求第202420242024个数,那我们不妨先求第202420242020个数,然后再往后再多求4个数就行。
也就是202420242020/10*120=202429042904240,找它之后的四个能被20或24整除的数,也就是
2429042904288
思路二:通过观察发现,第奇数位个数是20的倍数,第偶数位个数是24的倍数。所以第202420242024个数
就是24的倍数,那我们直接除以2(判断是这个数是第几个24的倍数),然后再乘24就行。
也就是202420242024÷2×24=2429042904288
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println(202420242024L/2*24);
}
}
思维
1.蓝桥19700:召唤数学精灵
题目数字过大,暴力枚举必然行不通,尝试输出前1000个数寻找规律,规律如下:
1,3,24,175,199,200,224,375,399,400,424,575,599,600,624,775,799,800,824,975,999,1000。
由此发现,除1,3外,每200个数中会出现4个满足条件的数。
故本题解答为System.out.print(2024041331404202L/200*4+2);
公式
1.蓝桥8735:海伦公式
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int a = scan.nextInt(),b = scan.nextInt(),c = scan.nextInt();
int ans = 0;;
if(a+b > c && a+c>b && b+c>a) {//三角形判定条件为与&,不是或||
int s = (a+b+c) / 2;
ans = (s*(s-a)*(s-b)*(s-c));
System.out.println(ans);
}else {
System.out.println("-1");
}
}
}