我是靠谱客的博主 老迟到树叶,最近开发中收集的这篇文章主要介绍2020年第11届蓝桥杯国赛javaB组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

7.2020国赛javaB组

E 玩具蛇

public class 玩具蛇 {
//	默认都是false
    static boolean [][] key=new boolean[5][5];
//    四个方向的移动 上,下,左,右
    static int [][]move={{-1,0},{1,0},{0,-1},{0,1}};
    static int ans=0;
    
    public static void main(String[] args) {
        for (int i = 1; i <= 4; i++) {
            for (int j = 1; j <= 4; j++) {
//            	开始点变为ture
                key[i][j]=true;
                dfs(i,j,1);
                key[i][j]=false;
            }
        }
 
        System.out.println(ans);
    }
    /**
     * 
     * @param x
     * @param y
     * @param cur 代表是第走的步数,到了16步,就终止
     */
    private static void dfs(int x,int y,int cur)
    {
//    	终点判断
        if(cur==16)
        {
            ans++;
            return;
        }
//        朝着四个方向移动  上,下,左,右
        for (int i = 0; i < move.length; i++) {
            int x2=x+move[i][0];
            int y2=y+move[i][1];
            /**
            要去的点并没有超过临界值,并且没有被访问,那就就说明访问的点是合格的
             */
            if(x2>=1&&x2<=4&&y2>=1&&y2<=4&&!key[x2][y2])
            {
//            	将合格的点标记为访问过的
                key[x2][y2]=true;
//                在这个点的基础上,在进行选择
                dfs(x2,y2,cur+1);
//               说明这个点应经不是合格的点了,或者说已经到了终点了
//                需要回退,然后换个方向进行
                key[x2][y2]=false;
            }
        }
    }
}

I: 补给

https://blog.csdn.net/weixin_45640260/article/details/110252819

J 质数行者

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/*
5 6 1
3 4 1 1 2 1


 */
public class 质数行者 {
	static int n,m,w;
	static int r1,c1,h1,r2,c2,h2;
//	存放着质数点
	static List<Integer> prime;

	static int[][][] dp ;
	static long Mood = 1000000007;
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		n = scanner.nextInt();
		m = scanner.nextInt();
		w = scanner.nextInt();
		r1 = scanner.nextInt();
		c1 = scanner.nextInt();
		h1 = scanner.nextInt();
		r2 = scanner.nextInt();
		c2 = scanner.nextInt();
		h2 = scanner.nextInt();
		prime = new ArrayList<Integer>();
//		所有dp的值都是-1
		dp = new int[n+1][m+1][w+1];
		   for (int i = 1; i <= n; i++)
	            for (int j = 1; j <= m; j++)
	            	 Arrays.fill(dp[i][j], -1);
//	   两个陷阱的值为0
		dp[r1][c1][h1] = 0;
		dp[r2][c2][h2] = 0;
//		访问过的值为1
		dp[1][1][1] = 1;
//		得到所有可行的质数
		int tem = Math.max(n, m);
		tem = Math.max(tem, w);
		int j;
		for (int i = 2; i <= tem ; i++) {
			for ( j = 2; j <= (int)Math.sqrt(i); j++) {
				if (i%j == 0) {
					break;
				}
			}
			
			if (j> (int)Math.sqrt(i)) {
				prime.add(i);
			}
		}
	

//	    开始递归,这个点也就是要去的点
		System.out.println(dfs(n,m,w));
	}

	private static long dfs(int x, int y, int z) {
//		这个点被访问或者说是陷阱
		if (dp[x][y][z] >= 0) {
			return dp[x][y][z] ;
		}

		
		long res = 0;
//		对所有质数进行遍历
		for (int i = 0; i < prime.size(); i++) {
//			if的判断,决定了是否越界
			if (x - prime.get(i) > 0) {
//				去下一个点
				res = (res+dfs(x-prime.get(i), y, z))%Mood;
			}
			
			if (y - prime.get(i) > 0) {
				res = (res+dfs(x, y-prime.get(i), z))%Mood;
			}
			
			if (z - prime.get(i) > 0) {
				res = (res+dfs(x, y, z-prime.get(i)))%Mood;
			}
		}
		
//		到了这里,递归已经完成了,这个点将被表记为访问过
		System.out.println(dp[x][y][z] = (int) res);
		return dp[x][y][z] = (int) res;
	}
}

最后

以上就是老迟到树叶为你收集整理的2020年第11届蓝桥杯国赛javaB组的全部内容,希望文章能够帮你解决2020年第11届蓝桥杯国赛javaB组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部