蓝桥杯专题-真题版含答案-【角谷步数】【兰顿蚂蚁】【九宫重排】【逆波兰表达式】-程序员宅基地

技术标签: 算法  蓝桥全系列  笔记  真题  蓝桥杯  职场和发展  

Unity3D特效百例 案例项目实战源码 Android-Unity实战问题汇总
游戏脚本-辅助自动化 Android控件全解手册 再战Android系列
Scratch编程案例 软考全系列 Unity3D学习专栏
蓝桥系列 ChatGPT和AIGC

关于作者

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

CSDN-芝麻粒儿

实践过程

角谷步数

你听说过角谷猜想吗?
任意的正整数,比如 5, 我们从它开始,如下规则计算:
如果是偶数,则除以2,如果是奇数,则乘以3再加1.
如此循环,最终必会得到“1” !
比如 5 的处理过程是:
5
16
8
4
2
1
一个正整数经过多少步才能变成1, 称为角谷步数。
对于5而言,步数也是5
对于1,步数为0
本题的要求是,从标准输入给定一个整数n(1<n<300)表示角谷步数
求满足这个角谷步数的最小的正整数
例如:
输入:
3
则输出:
8

输入:
4
则输出:
16

输入:
7
则输出:
3

import java.util.Scanner;  
public class JGStepNumber {
      
    static int sum = 0;  
    public static void f(int n){
      
        if(n<=1){
      
            return ;  
        }  
        sum++;  
        if(n%2==0){
      
            f(n/2); // 如果是偶数,则除以2   
        }else{
      
            f(n*3+1);   // 如果是奇数,则乘以3再加1   
        }  
    }  
    public static void main(String[] args) {
      
        Scanner scan = new Scanner(System.in);  
        System.out.println("输入给定一个整数n(1<n<300)");  
        int n = scan.nextInt();  
        int i=0;  
        while(true){
      
            f(++i); // 得到角谷步数sum   
            if(sum==n){
      
                System.out.println(i);  
                return ;  
            }  
            sum = 0;  
        }  
    }  
}

兰顿蚂蚁

兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。
平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。
蚂蚁的头部朝向为:上下左右其中一方。
蚂蚁的移动规则十分简单:
若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;
若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。

规则虽然简单,蚂蚁的行为却十分复杂。刚刚开始时留下的路线都会有接近对称,像是会重复,但不论起始状态如何,蚂蚁经过漫长的混乱活动后,会开辟出一条规则的“高速公路”。

蚂蚁的路线是很难事先预测的。
你的任务是根据初始状态,用计算机模拟兰顿蚂蚁在第n步行走后所处的位置。

【数据格式】

输入数据的第一行是 m n 两个整数(3 < m, n < 100),表示正方形格子的行数和列数。
接下来是 m 行数据。
每行数据为 n 个被空格分开的数字。0 表示白格,1 表示黑格。

接下来是一行数据:x y s k, 其中x y为整数,表示蚂蚁所在行号和列号(行号从上到下增长,列号从左到右增长,都是从0开始编号)。s 是一个大写字母,表示蚂蚁头的朝向,我们约定:上下左右分别用:UDLR表示。k 表示蚂蚁走的步数。

输出数据为两个空格分开的整数 p q, 分别表示蚂蚁在k步后,所处格子的行号和列号。

例如, 输入:
5 6
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
2 3 L 5
程序应该输出:
1 3

再例如, 输入:
3 3
0 0 0
1 1 1
1 1 1
1 1 U 6
程序应该输出:
0 0

import java.util.*;
public class Main08 {
    
	public static void main(String args[]){
    
		Scanner s = new Scanner(System.in);
		int m,n;
		m = s.nextInt();
		n = s.nextInt();
		int arr [][] = new int [m][n];
		for(int i =0;i<m;i++)
			for(int j =0;j<n;j++){
    
				arr [i][j] = s.nextInt();
			}
		int x,y,k;
		String l;
		x = s.nextInt();
		y = s.nextInt();
		l = s.next();
		k = s.nextInt();
		//  L  U  R   D    --->   0   1   2  3
		int num = 0;
		String[] step = new String[] {
     "L", "U", "R", "D" };
		for ( ; num < 4; num++) {
    
			if (l.equals(step[num]))
				break;
		}
		for(int i =0;i<k;i++){
    
			if(arr[x][y] == 1){
      //black 
				arr[x][y] = 0;
				num = (num + 1)%4;
				
			}else{
          //white
				arr[x][y] = 1;
				num = (num + 3)%4;
			}
			switch(num){
    
			case 0:
				y = y-1;    //L
				break;
			case 1:
				x = x-1;      //U
				break;
			case 2:
				y = y+1;       //R
				break;
			case 3:
				x = x+1;          //D
				break; 
		   }
		}
		System.out.println(x+"  "+y);
	}
}

九宫重排

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
public class Main{
    //双向广搜
	private static HashMap<String,Integer> hm1=null,hm2=null;
	public static void main(String[] args) {
    
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		try {
    
			String start=bf.readLine();
			String end=bf.readLine();
			char a[][]=new char[3][3];
			char b[][]=new char[3][3];
			int c=0;
			int 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);
					if(a[i][j]=='.'){
    
						x1=i;
						y1=j;
					}
					if(b[i][j]=='.'){
    
						x2=i;
						y2=j;
					}
					c++;
				}
			}
			Node node1=new Node(a,0,x1,y1);
			Node node2=new Node(b,0,x2,y2);
			Queue<Node> q1=new LinkedList<Node>();
			Queue<Node> q2=new LinkedList<Node>();
			hm1=new HashMap<String, Integer>();
			hm2=new HashMap<String, Integer>();
			hm1.put(start, 0);
			hm2.put(end, 0);
			q1.add(node1);
			q2.add(node2);
			System.out.println(bfs(q1,q2));
		} catch (IOException e) {
    
			e.printStackTrace();
		}
	}
	private static int bfs(Queue<Node> q1,Queue<Node> q2) {
    
		while(!q1.isEmpty()||!q2.isEmpty()){
    
			if(!q1.isEmpty()){
    
				
				Node node1=q1.poll();
			//	System.out.println(node1.getTuString()+"----1");
				if(hm2.containsKey(node1.getTuString())){
    
					return node1.getSum()+hm2.get(node1.getTuString());
				}
				int x=node1.getX();
				int y=node1.getY();
				if(x>0){
    
					char a[][]=node1.getTuCopy();
					a[x][y]=a[x-1][y];
					a[x-1][y]='.';
					Node n=new Node(a,node1.getSum()+1,x-1,y);
					String s=n.getTuString();
					if(hm2.containsKey(s)){
    
						return n.getSum()+hm2.get(s);
					}
					if(!hm1.containsKey(s)){
    
						hm1.put(s, n.getSum());
						q1.add(n);
					}
				}
				if(x<2){
    
					char a[][]=node1.getTuCopy();
					a[x][y]=a[x+1][y];
					a[x+1][y]='.';
					Node n=new Node(a,node1.getSum()+1,x+1,y);
					String s=n.getTuString();
					if(hm2.containsKey(s)){
    
						return n.getSum()+hm2.get(s);
					}
					if(!hm1.containsKey(s)){
    
						hm1.put(s, n.getSum());
						q1.add(n);
					}
				}
				if(y>0){
    
					char a[][]=node1.getTuCopy();
					a[x][y]=a[x][y-1];
					a[x][y-1]='.';
					Node n=new Node(a,node1.getSum()+1,x,y-1);
					String s=n.getTuString();
					if(hm2.containsKey(s)){
    
						return n.getSum()+hm2.get(s);
					}
					if(!hm1.containsKey(s)){
    
						hm1.put(s, n.getSum());
						q1.add(n);
					}
				}
				if(y<2){
    
					char a[][]=node1.getTuCopy();
					a[x][y]=a[x][y+1];
					a[x][y+1]='.';
					Node n=new Node(a,node1.getSum()+1,x,y+1);
					String s=n.getTuString();
					if(hm2.containsKey(s)){
    
						return n.getSum()+hm2.get(s);
					}
					if(!hm1.containsKey(s)){
    
						hm1.put(s, n.getSum());
						q1.add(n);
					}
				}
			}
			
			
			if(!q2.isEmpty()){
    
				
				Node node2=q2.poll();
			//	System.out.println(node2.getTuString()+"----2");
				if(hm1.containsKey(node2.getTuString())){
    
					return node2.getSum()+hm1.get(node2.getTuString());
				}
				int x=node2.getX();
				int y=node2.getY();
				if(x>0){
    
					char a[][]=node2.getTuCopy();
					a[x][y]=a[x-1][y];
					a[x-1][y]='.';
					Node n=new Node(a,node2.getSum()+1,x-1,y);
					String s=n.getTuString();
					if(hm1.containsKey(s)){
    
						return n.getSum()+hm1.get(s);
					}
					if(!hm2.containsKey(s)){
    
						hm2.put(s, n.getSum());
						q2.add(n);
					}
				}
				if(x<2){
    
					char a[][]=node2.getTuCopy();
					a[x][y]=a[x+1][y];
					a[x+1][y]='.';
					Node n=new Node(a,node2.getSum()+1,x+1,y);
					String s=n.getTuString();
					if(hm1.containsKey(s)){
    
						return n.getSum()+hm1.get(s);
					}
					if(!hm2.containsKey(s)){
    
						hm2.put(s, n.getSum());
						q2.add(n);
					}
				}
				if(y>0){
    
					char a[][]=node2.getTuCopy();
					a[x][y]=a[x][y-1];
					a[x][y-1]='.';
					Node n=new Node(a,node2.getSum()+1,x,y-1);
					String s=n.getTuString();
					if(hm1.containsKey(s)){
    
						return n.getSum()+hm1.get(s);
					}
					if(!hm2.containsKey(s)){
    
						hm2.put(s, n.getSum());
						q2.add(n);
					}
				}
				if(y<2){
    
					char a[][]=node2.getTuCopy();
					a[x][y]=a[x][y+1];
					a[x][y+1]='.';
					Node n=new Node(a,node2.getSum()+1,x,y+1);
					String s=n.getTuString();
					if(hm1.containsKey(s)){
    
						return n.getSum()+hm1.get(s);
					}
					if(!hm2.containsKey(s)){
    
						hm2.put(s, n.getSum());
						q2.add(n);
					}
				}
			}
		}
		return -1;
	}
}
class Node{
    
	char tu[][]=new char[3][3];
	int sum=0;
	int x=0,y=0;
	public Node(char[][] tu, int sum, int x, int y) {
    
		super();
		this.tu = tu;
		this.sum = sum;
		this.x = x;
		this.y = y;
	}
	public char[][] getTuCopy() {
    
		char a[][]=new char[3][3];
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				a[i][j]=tu[i][j];
		return a;
	}
	public String getTuString() {
    
		StringBuffer sb=new StringBuffer("");
		for(int i=0;i<3;i++)
			for(int j=0;j<3;j++)
				sb.append(tu[i][j]);
		return sb.toString();
	}
	public void setTu(char[][] tu) {
    
		this.tu = tu;
	}
	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;
	}
}

逆波兰表达式

逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,
也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。

输入
输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。

输出
输出为一行,表达式的值。
可直接用printf(“%f\n”, v)输出表达式的值v。

样例输入

    • 11.0 12.0 + 24.0 35.0

样例输出
1357.000000

import java.util.LinkedList;
import java.util.Scanner;
public class Main {
    
	public static void main(String[] args) {
    
		// TODO Auto-generated method stub
		Scanner input=new Scanner(System.in);
		LinkedList<String> linklst=new LinkedList<String>();
	    String s=input.nextLine();
	    String[] ss=s.split(" ");
	    for(String to:ss){
    
	    	linklst.add(to);
	    }
		
			String a;
		    double b;
		    double c;
		    double d;
			for(int i=linklst.size()-1;linklst.size()>1;i--)
			{
    
				a=(String)linklst.get(i);
				//b=Double.parseDouble((String)linklst.get(i+1));
				//c=Double.parseDouble((String)linklst.get(i+2));
				if(a.equals("+")){
    
					b=Double.parseDouble((String)linklst.get(i+1));
					c=Double.parseDouble((String)linklst.get(i+2));
					d=b+c;
					linklst.add(i, String.valueOf(d));
					linklst.remove(i+1);
					linklst.remove(i+1);
					linklst.remove(i+1);
					
				}
				if(a.equals("-")){
    
					b=Double.parseDouble((String)linklst.get(i+1));
					c=Double.parseDouble((String)linklst.get(i+2));
					d=Math.abs(b-c);
					linklst.add(i, String.valueOf(d));
					linklst.remove(i+1);
					linklst.remove(i+1);
					linklst.remove(i+1);
				}
				if(a.equals("*")){
    
					b=Double.parseDouble((String)linklst.get(i+1));
					c=Double.parseDouble((String)linklst.get(i+2));
					d=b*c;
					linklst.add(i, String.valueOf(d));
					linklst.remove(i+1);
					linklst.remove(i+1);
					linklst.remove(i+1);
				}
				if(a.equals("/")){
    
					b=Double.parseDouble((String)linklst.get(i+1));
					c=Double.parseDouble((String)linklst.get(i+2));
					d=b/c;
					linklst.add(i, String.valueOf(d));
					linklst.remove(i+1);
					linklst.remove(i+1);
					linklst.remove(i+1);
				}
			//	i=linklst.size()-1;
			}
		System.out.printf("%.6f",Double.parseDouble(linklst.getLast()));
		System.out.println();
	}
}

其他

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27489007/article/details/135036197

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文