蓝桥杯专题-试题版-【九宫重排】【格子刷油漆】【回文数字】【国王的烦恼】

news2024/11/17 14:09:09
  • 点击跳转专栏=>Unity3D特效百例
  • 点击跳转专栏=>案例项目实战源码
  • 点击跳转专栏=>游戏脚本-辅助自动化
  • 点击跳转专栏=>Android控件全解手册
  • 点击跳转专栏=>Scratch编程案例
  • 点击跳转=>软考全系列
  • 点击跳转=>蓝桥系列

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,获取更多支持,交流让学习不再孤单

芝麻粒儿-空名先生

👉实践过程

需要所有整理的文档可底部卡片联系我,直接发压缩包。

😜九宫重排

在这里插入图片描述

问题描述
  如图的第一个九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。
我们把第一个图的局面记为:12345678.
  把第二个图的局面记为:123.46758
  显然是按从上到下,从左到右的顺序记录数字,空格记为句点。
  本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。
输入格式
  输入第一行包含九宫的初态,第二行包含九宫的终态。
输出格式
  输出最少的步数,如果不存在方案,则输出-1。
样例输入
12345678.
123.46758
样例输出
3
样例输入
13524678.
46758123.
样例输出
22

 import java.io.*;
import java.util.*;
public class Main{
    static Map<String,Integer> hm1=new HashMap<String,Integer>();
    static Map<String,Integer> hm2=new HashMap<String,Integer>();
    public static void main(String args[]) throws IOException{
        BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
        String start=bf.readLine();
        String end=bf.readLine();
        char[][] a=new char[3][3];
        char[][] b=new char[3][3];
        int c=0,x1=0,y1=0,x2=0,y2=0;
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                a[i][j]=start.charAt(c);
                b[i][j]=end.charAt(c);
                c++;
                if(a[i][j]=='.'){
                    x1=i;
                    y1=j;
                }
                if(b[i][j]=='.'){
                    x2=i;
                    y2=j;
                }
            }
        }
        Node node1=new Node(0,x1,y1,a);
        Node node2=new Node(0,x2,y2,b);
         
        Queue<Node> qnode1=new LinkedList<Node>();
        Queue<Node> qnode2=new LinkedList<Node>();
        qnode1.add(node1);
        qnode2.add(node2);
        hm1.put(node1.gettu(), 0);
        hm2.put(node2.gettu(), 0);
        System.out.println(bfs(qnode1,qnode2));
    }
    public static int bfs(Queue<Node> q1,Queue<Node> q2){
        while(!q1.isEmpty()||!q2.isEmpty()){
            if(!q1.isEmpty()){
                Node node=q1.poll();
                int x=node.getX();
                int y=node.getY();
                if(hm2.containsKey(node.gettu())){
                    return node.getSum()+hm2.get(node.gettu());
                }
                if(x>0){
                    char[][] c=node.getCopy();
                    c[x][y]=c[x-1][y];
                    c[x-1][y]='.';
       Node node2=new Node(node.sum+1,x-1,y,c);
                    String s=node2.gettu();
                    if(hm2.containsKey(s)){
     return node2.getSum()+hm2.get(node2.gettu());
                    }
                    if(!hm1.containsKey(s)){
 hm1.put(s,node2.getSum());
                      q1.add(node2);
                    }
                }
                if(x<2){
                    char[][] c=node.getCopy();
                    c[x][y]=c[x+1][y];
                    c[x+1][y]='.';
      Node node2=new Node(node.sum+1,x+1,y,c);
                    String s=node2.gettu();
                    if(hm2.containsKey(s)){
                        return node2.getSum()+hm2.get(s);
                    }
                    if(!hm1.containsKey(s)){
                        hm1.put(s,node2.getSum());
                        q1.add(node2);
                    }
                }
                if(y>0){
                    char[][] c=node.getCopy();
                    c[x][y]=c[x][y-1];
                    c[x][y-1]='.';
                    Node node2=new Node(node.sum+1,x,y-1,c);
                    String s=node2.gettu();
                    if(hm2.containsKey(s)){
                        return node2.getSum()+hm2.get(s);
                    }
                    if(!hm1.containsKey(s)){
                        hm1.put(s,node2.getSum());
                        q1.add(node2);
                    }
                }
                if(y<2){
                    char[][] c=node.getCopy();
                    c[x][y]=c[x][y+1];
                    c[x][y+1]='.';
                    Node node2=new Node(node.sum+1,x,y+1,c);
                    String s=node2.gettu();
                    if(hm2.containsKey(s)){
                        return node2.getSum()+hm2.get(s);
                    }
                    if(!hm1.containsKey(s)){
                        hm1.put(s,node2.getSum());
                        q1.add(node2);
                    }
                }
            }
            if(!q2.isEmpty()){
                Node node=q2.poll();
                int x=node.getX();
                int y=node.getY();
                if(hm1.containsKey(node.gettu())){
       return node.getSum()+hm1.get(node.gettu());
                }
                if(x>0){
                    char[][] c=node.getCopy();
                    c[x][y]=c[x-1][y];
                    c[x-1][y]='.';
       Node node2=new Node(node.sum+1,x-1,y,c);
                    String s=node2.gettu();
                    if(hm1.containsKey(s)){
               return node2.getSum()+hm1.get(s);
                    }
       if(!hm2.containsKey(s)){
             hm2.put(s,node2.getSum());
             q2.add(node2);
                    }
                }
                if(x<2){
                    char[][] c=node.getCopy();
                    c[x][y]=c[x+1][y];
                    c[x+1][y]='.';
       Node node2=new Node(node.sum+1,x+1,y,c);
                    String s=node2.gettu();
                    if(hm1.containsKey(s)){
               return node2.getSum()+hm1.get(s);
                    }
                    if(!hm2.containsKey(s)){
 hm2.put(s,node2.getSum());
                   q2.add(node2);
                    }
                }
                if(y>0){
                    char[][] c=node.getCopy();
                    c[x][y]=c[x][y-1];
                    c[x][y-1]='.';
       Node node2=new Node(node.sum+1,x,y-1,c);
                    String s=node2.gettu();
                    if(hm1.containsKey(s)){
       return node2.getSum()+hm1.get(s);
                    }
                    if(!hm2.containsKey(s)){
 hm2.put(s,node2.getSum());
                      q2.add(node2);
                    }
                }
                if(y<2){
                    char[][] c=node.getCopy();
                    c[x][y]=c[x][y+1];
                    c[x][y+1]='.';
                    Node node2=new Node(node.sum+1,x,y+1,c);
                    String s=node2.gettu();
                    if(hm1.containsKey(s)){
                        return node2.getSum()+hm1.get(s);
                    }
                    if(!hm2.containsKey(s)){
                        hm2.put(s,node2.getSum());
                        q2.add(node2);
                    }
                }
            }
             
        }
         
        return -1;
    }
}
class Node{
    int sum,x,y;
    char[][] c=null;
    public char[][] getCopy(){
        char[][] copy=new char[3][3];
         
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                copy[i][j]=c[i][j];
            }
        }
        return copy;
    }
    public String gettu(){
        StringBuffer s=new StringBuffer();
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                s.append(c[i][j]);
            }
        }
        return s.toString();
    }
    public Node(int sum, int x, int y, char[][] c) {
        super();
        this.sum = sum;
        this.x = x;
        this.y = y;
        this.c = c;
    }
    public int getSum() {
        return sum;
    }
    public void setSum(int sum) {
        this.sum = sum;
    }
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
}

😜格子刷油漆

在这里插入图片描述

问题描述
  X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如图所示),现需要把这些格子刷上保护漆。
你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!)
  比如:a d b c e f 就是合格的刷漆顺序。
  c e f d a b 是另一种合适的方案。
  当已知 N 时,求总的方案数。当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模。
输入格式
  输入数据为一个正整数(不大于1000)
输出格式
  输出数据为一个正整数。
样例输入
2
样例输出
24
样例输入
3
样例输出
96
样例输入
22
样例输出
359635897

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
		int n=Integer.parseInt(bfr.readLine());
		long sum=0,mod=1000000007;
		long[] A=new long[n+1];
		long[] B=new long[n+1];
		A[1]=1; A[2]=2;
		B[1]=1; B[2]=6;
		int i,j;
		for(i=3;i<=n;i++)
		{
			A[i]=2*A[i-1]%mod;
	B[i]=(2*B[i-1]%mod+2*A[i-2]%mod+B[i-2]*2%mod+2*A[i-2]%mod+2*B[i-2]%mod)%mod;
		}
		sum=4*B[n]%mod;
		for(j=2;j<n;j++)
		{
			sum+=(2*(A[j-1]*2*B[n-j]*2%mod+2*A[n-j]*2*B[j-1]%mod));
			sum%=mod;
		}
		if(n>1) System.out.println(sum);
		else System.out.println(2);
	}

😜回文数字

问题描述
  观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

本题要求你找到一些5位或6位的十进制数字。满足如下要求:
  该数字的各个数位之和等于输入的整数。
输入格式
  一个正整数 n (10<n<100), 表示要求满足的数位和。
输出格式
  若干行,每行包含一个满足要求的5位或6位整数。
  数字按从小到大的顺序排列。
  如果没有满足条件的,输出:-1
样例输入
44
样例输出
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499
样例输入
60
样例输出
-1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main
{
	public static void main(String args[]) throws IOException
	{
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String str1 = bf.readLine();
		int n = Integer.parseInt(str1);
		int t = 0;
		for (int i = 1; i <= 9; i++)
			for (int j = 0; j <= 9; j++)
				for (int k = 0; k <= 9; k++)
				{
					if (n == 2 * (i + j) + k)
					{
						System.out.println(i * 10000 + j * 1000 + k * 100 + j
								* 10 + i);
						t = 1;
					}

				}
		for (int i = 1; i <= 9; i++)
			for (int j = 0; j <= 9; j++)
				for (int k = 0; k <= 9; k++)
				{
					if (n == 2 * (i + j + k))
					{
						System.out.println(i * 100000 + j * 10000 + k * 1000
								+ k * 100 + j * 10 + i);
						t = 1;
					}

				}
		if (t == 0)
			System.out.println("-1");
	}
}

😜国王的烦恼

问题描述
C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多座桥连接。然而,由于海水冲刷,有一些大桥面临着不能使用的危险。

如果两个小岛间的所有大桥都不能使用,则这两座小岛就不能直接到达了。然而,只要这两座小岛的居民能通过其他的桥或者其他的小岛互相到达,他们就会安然无事。但是,如果前一天两个小岛之间还有方法可以到达,后一天却不能到达了,居民们就会一起抗议。
现在C国的国王已经知道了每座桥能使用的天数,超过这个天数就不能使用了。现在他想知道居民们会有多少天进行抗议。
输入格式
  输入的第一行包含两个整数n, m,分别表示小岛的个数和桥的数量。
  接下来m行,每行三个整数a, b, t,分别表示该座桥连接a号和b号两个小岛,能使用t天。小岛的编号从1开始递增。
输出格式
  输出一个整数,表示居民们会抗议的天数。
样例输入
4 4
1 2 2
1 3 2
2 3 1
3 4 3
样例输出
2
样例说明
  第一天后2和3之间的桥不能使用,不影响。
  第二天后1和2之间,以及1和3之间的桥不能使用,居民们会抗议。
  第三天后3和4之间的桥不能使用,居民们会抗议。
数据规模和约定
  对于30%的数据,1<=n<=20,1<=m<=100;
  对于50%的数据,1<=n<=500,1<=m<=10000;
  对于100%的数据,1<=n<=10000,1<=m<=100000,1<=a, b<=n, 1<=t<=100000。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

	static int n;
	static int sum = 0;
	static int a[];
	static Edge p[];

	public static void main(String[] args) throws Exception {

		BufferedReader buf = new BufferedReader(
				new InputStreamReader(System.in));
		String read[] = buf.readLine().split("\\s+");
		n = Integer.parseInt(read[0]);
		int m = Integer.parseInt(read[1]);

		p = new Edge[m];
		a = new int[n];

		int s, e, w, t;
		for (int i = 0; i < m; i++) {
			read = buf.readLine().split("\\s+");
			s = Integer.parseInt(read[0]) - 1;
			e = Integer.parseInt(read[1]) - 1;
			w = Integer.parseInt(read[2]);
			p[i] = new Edge(s, e, w);
		}

		java.util.Arrays.sort(p);

		boolean flag = false;
		init();
		for (int i = 0; i < m; i++) {

			flag = false;
			s = p[i].s;
			e = p[i].e;

			if (!isConnect(s, e)) {
				flag = true;
				union(s, e);
			}

			while (i < m - 1 && p[i].w == p[i + 1].w) {
				s = p[i + 1].s;
				e = p[i + 1].e;
				if (flag && !isConnect(s, e))
					union(s, e);
				if (!flag && !isConnect(s, e)) {
					flag = true;
					union(s, e);
				}
				i++;
			}
			if (flag)
				sum++;
		}
		System.out.println(sum);
	}
	private static boolean isConnect(int i, int j) {
		if (find(i) == find(j))
			return true;
		return false;
	}
	private static void init() {
		for (int i = 0; i < n; i++)
			a[i] = i;
	}
	private static void union(int x, int y) {
		a[find(x)] = find(y);
	}
	private static int find(int x) {
		if (a[x] == x)
			return x;
		a[x] = find(a[x]);
		return a[x];
	}
}
class Edge implements Comparable<Edge> {
	int s;
	int e;
	int w;
	public Edge(int s, int e, int w) {
		super();
		this.s = s;
		this.e = e;
		this.w = w;
	}
	@Override
	public int compareTo(Edge p) {
		if (this.w < p.w)
			return 1;
		else if (this.w > p.w)
			return -1;
		return 0;
	}

}

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

空间曲线的切线和法平面与曲面的切平面和法线

&#xff08;一&#xff09;空间曲线的切线和法平面 1. 参数方程的形式 理解和记住如下逻辑&#xff1a; 该两个公式&#xff0c;笔者可以理解但是无法证明。 2. 参数方程外的第二种形式&#xff1a; 此种变换的本质&#xff0c;就是将多元函数转换为参数方程的形式。如此看…

English Learning - L3 作业打卡 Lesson7 Day54 2023.6.29 周四

English Learning - L3 作业打卡 Lesson7 Day54 2023.6.29 周四 引言&#x1f349;句1: I daydreamed like I did as a little girl and I imagined myself walking gracefully, helping other people through my journey and snowboarding again.成分划分连读爆破语调 &#x…

Learn Mongodb 可是工具及基本命令的使用 ③

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; PHP MYSQL &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

Spark 3.4.0新特性--UI支持存储在RocksDB中

背景 对于Spark来说&#xff0c;目前存储所有的事件信息以及UI所需要的信息都是默认存储在内存中&#xff0c;这在CS中&#xff0c;对于以Spark作为 Server的模式下&#xff0c;会导致OOM&#xff0c;也会导致造成之前作者提交PR&#xff1a;Multi sparkSession should share …

Java泛型详解:为什么使用泛型?如何使用泛型?

Java泛型详解&#xff1a;为什么使用泛型&#xff1f;如何使用泛型&#xff1f; &#x1f498;一、为什么使用泛型&#xff1f;&#x1f498;二、如何使用泛型&#xff1f;&#x1f496;1. 泛型类的使用&#xff1a;&#x1f496;2. 泛型方法的使用&#xff1a;&#x1f496;3.…

什么是ABP?

1、ABP背后的思想——DDD&#xff08;领域驱动设计&#xff09; ABP架构&#xff1a; ABP实现了多层架构&#xff08;领域层&#xff0c;应用层&#xff0c;基础设施层和表示层&#xff09;&#xff0c;以及领域驱动设计&#xff08;实体&#xff0c;存储库&#xff0c;领域服…

(R)-tert-Bu4-DOTAGA,817562-90-6,(R)-DOTAGA-四叔丁酯,的反应特点及性质研究

​ 规格单位&#xff1a;g |货期&#xff1a;按​照具体的库存进行提供 | 纯度&#xff1a;95% 试剂描述&#xff1a; (R)-tert-Bu4-DOTAGA大环化合物是一种多齿配体&#xff0c;其配位原子位于环的骨架上&#xff0c;大环的配位原子可以是O、N、S、Se、P、As等。有二维的…

C++primer(第五版)第七章(类)

类的基本思想是数据抽象和封装. 数据抽象是一种依赖于接口和实现的分离的编程技术. 封装实现了类的接口和实现的分离. 7.1定义抽象数据类型 定义一个抽象数据类型使用关键字struct或是clas(差别仅在于默认访问权限修饰符). //这是一个简单的类定义 class Student{ …

C++ 结合 opencv读取图片与视频

C 结合 opencv读取图片与视频 文章目录 C 结合 opencv读取图片与视频一、安装opencv二 、配置文件准备2.1 新建立文件夹2.2 .vscode文件下配置文件&#xff08;1&#xff09;配置tasks.json文件&#xff08;1&#xff09;配置launch.json 三 、src文件下代码编写3.1 图片的读取…

matplotlib设置坐标轴为象限模式

import numpy as np import matplotlib.pyplot as pltx np.linspace(-np.pi, np.pi, 1000) cosy np.cos(x) siny np.sin(x)plt.xlim(min(x), max(x)) plt.ylim(min(cosy), max(cosy)0.5) plt.plot(x, cosy) plt.plot(x, siny) # 设置坐标刻度 plt.xticks([-np.pi, -np.pi/2,…

ubuntu安装python

ubuntu安装python 安装包下载 切换到想要的文件夹&#xff1a;如 cd /usr/local/python3 下载安装包 wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz 网速慢的话也可以现在本电脑下载tgz文件&#xff0c;然后上传到服务器 第一次上传失败&#xff01; Py…

SFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A

编辑&#xff1a;ll SFP3012A-ASEMI代理海矽美快恢复二极管SFP3012A 型号&#xff1a;SFP3012A 品牌&#xff1a;MHCHXM&#xff08;海矽美&#xff09; 芯片个数&#xff1a;单芯片 封装&#xff1a;TO-247 恢复时间&#xff1a;≤75ns 工作温度&#xff1a;-40C~175C …

JS中的异步与Promise使用

同步与异步 我们知道JS是一个单线程的语言&#xff0c;即在同一时间只能做一件事情。为什么设计为当线程呢。&#xff1f;在早期JS是为了在浏览器中运行&#xff0c;我们可以利用JS来制作一些页面的效果也可以和用户做一些交互。所以设计为单线程也是为了避免复杂度。比如在网…

常见面试题之线程中并发锁(一)

1. 讲一下synchronized关键字的底层原理&#xff1f; 1.1. 基本使用 如下抢票的代码&#xff0c;如果不加锁&#xff0c;就会出现超卖或者一张票卖给多个人 Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】&#xff0c;其它线程再想获取这…

常州工学院计算机组成原理(样卷)

微程序控制器&#xff1a;仿照程序设计的基本方法&#xff0c;将实现指令系统中所有指令所需要的所有控制信号按照一定的规则编码成微指令&#xff0c;若干条实现同一条指令功能的微指令构成一段微程序&#xff0c;将实现所有指令的微程序存放在一个只读存储器ROM中&#xff0c…

一套A股量化系统

shares A 股量化交易系统后台开发语言 Go/Python gmsec算法使用&#xff1a;pytorch全链路量化&#xff0c;行业板块分析&#xff0c;直接贴图。欢迎体验

【计算机视觉】最新综述:南洋理工和上海AI Lab提出基于Transformer的视觉分割综述

文章目录 一、导读二、摘要三、内容解读3.1 研究动机3.2 这篇综述的特色&#xff0c;以及与以往的Transformer综述有什么区别&#xff1f;3.3 Transformer-Based 分割和检测方法总结与对比3.4 相关研究领域的方法总结与对比3.5 不同方法的实验结果对比3.6 未来可以进行的方向 一…

vue三种方式导出报表至excel

1、序言 1.1、源码 源码在下方&#xff0c;复制运行&#xff0c;安装相应的插件即可 1.2、坑 方式一、方式二安装相同插件&#xff1a; npm install xlsx xlsx-style file-saver 导入 xlsx-style 会报如下的错误 解决办法&#xff1a; &#xff08;1&#xff09;去node_modules…

多元回归预测 | Matlab基于灰狼算法(GWO)优化混合核极限学习机HKELM回归预测, GWO-HKELM数据回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于灰狼算法(GWO)优化混合核极限学习机HKELM回归预测, GWO-HKELM数据回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 …

基于matlab使用深度学习估计身体姿势(附源码)

一、前言 此示例演示如何使用 OpenPose 算法和预训练网络估计一个或多个人的身体姿势。 身体姿势估计的目标是识别图像中人的位置及其身体部位的方向。当场景中存在多个人时&#xff0c;由于遮挡、身体接触和相似身体部位的接近&#xff0c;姿势估计可能会更加困难。 有两种…