蓝桥杯31天冲刺打卡题解(Day3)

Day3

第一题

第五届2014年蓝桥杯国赛

年龄巧合

C++B组第一题

填空题

暴力枚举每一个年龄相加的结果,再用2014与i相减作比较即可,需要加一个break,否则也会输出表弟的年龄。

public class Main {
    public static void main(String[] args) {
	   for (int i = 1000; i < 2014; i++) {
		   int age = i / 1000 + i / 100 % 10 + i / 10 % 10 + i % 10;
		   if (age == 2014 - i) {
			  System.out.print(i);
			  break;
		   }
	   }
    }
}

第二题

第八届2017年蓝桥杯省赛

纸牌三角形

JavaB组第二题

填空题

dfs全排列模板

public class Main {

    static final int N = 10;
    static int cnt;
    static int[] a = new int[N];
    static boolean[] used = new boolean[N];

    public static void main(String[] args) {
        dfs(1);
        System.out.println(cnt / 3 / 2); // 去除旋转3种 镜像2种
    }

    private static void dfs(int u) {
        if (u > 9) {
            int b1 = a[1] + a[2] + a[3] + a[4];
            int b2 = a[4] + a[5] + a[6] + a[7];
            int b3 = a[7] + a[8] + a[9] + a[1 ];

            if (b1 == b2 && b2 == b3) cnt++;
            return;
        } else {
            for (int i = 1; i <= 9; i++) { // 全排列模板
                if (!used[i]) {
                    a[u] = i;
                    used[i] = true;
                    dfs(u + 1);
                    used[i] = false;// 回溯 恢复现场
                }
            }
        }
    }
}

第三题

第三届2012年蓝桥杯省赛

取球游戏

C++本科组第十题

博弈论

import java.util.Scanner;

public class Main {
    
    static final int N = 10010;
    static int[] a = new int[N];
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        for (int i = 1; i < 10000; i++) {
            if (a[i] == 0) {
                a[i + 1] = 1;
                a[i + 3] = 1;
                a[i + 7] = 1;
                a[i + 8] = 1;
            }
        }
        while (n-- > 0) {
            int i = sc.nextInt();
            System.out.println(a[i]);
        }
    }
}

你可能感兴趣的:(#,刷题笔记,蓝桥杯,职场和发展,dfs,深度优先遍历,算法)