时间紧迫,故训练题型皆为枚举,模拟类题,旨在暴力拿分。题单摘自英雄哪里出来抖音视频。

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");
		}
 	}
}