【蓝桥杯】每日一题进击国赛

举报
随性. 发表于 2022/04/25 15:50:22 2022/04/25
【摘要】 蓝桥杯---Java大学C组---个人赛日常刷题【day17】

😜今日份搞题 😜

🥇1.求先序排列

🥈2.摆动序列

🥉3.瓷砖铺放

🥇求先序排列

⚽题目描述

资源限制

时间限制:1.0s   内存限制:256.0MB

问题描述

  给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
⌨输入格式
两行,每行一个字符串,分别表示中序和后序排列
🔍输出格式
一个字符串,表示所求先序排列
样例输入
  BADC
  BDCA

样例输出
    ABCD
import java.util.*;
 
public class Main
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
		String mid=sc.next();//中序
		String after=sc.next();//后序
		before(mid,after);

	}

	private static void before(String mid, String after) {
		if (mid.length()>0) { //若右树有值
			char c=after.charAt(after.length()-1);//最后一个字符
			System.out.print(c);
			int n=mid.indexOf(c);//找到主根
			before(mid.substring(0,n), after.substring(0,n));//一次循环
			before(mid.substring(n+1), after.substring(n,after.length()-1));
		}
    }
}

解题思路

1️⃣.中序ACGDBHZKX,后序CDGAHXKZB,首先可找到主根B;

2️⃣.那么我们找到中序遍历中的B,由这种遍历的性质,可将中序遍历分为ACGD和HZKX两棵子树

3️⃣.那么对应可找到后序遍历CDGA和HXKZ(从头找即可)

4️⃣.从而问题就变成求
(1).中序遍历ACGD,后序遍历CDGA的树
(2).中序遍历HZKX,后序遍历HXKZ的树

🥈摆动序列

 ⚽题目描述

资源限制
时间限制:1.0s   内存限制:512.0MB

问题描述
  如果一个序列满足下面的性质,我们就将它称为摆动序列:
  1. 序列中的所有数都是不大于k的正整数;
  2. 序列中至少有两个数。
  3. 序列中的数两两不相等;
  4. 如果第i – 1个数比第i – 2个数大,则第i个数比第i – 2个数小;如果第i – 1个数比第i – 2个数小,则第i个数比第i – 2个数大。
  比如,当k = 3时,有下面几个这样的序列:
  1 2
  1 3
  2 1
  2 1 3
  2 3
  2 3 1
  3 1
  3 2
  一共有8种,给定k,请求出满足上面要求的序列的个数。

⌨输入格式

输入包含了一个整数k。(k<=20)
🔍输出格式
输出一个整数,表示满足要求的序列个数。
样例输入
  3

样例输出
    8
import java.util.*;
 
public class Main
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int[][] dp=new int[n+1][n+1];
		for (int i = 2; i <=n; i++) {
			dp[i][2]=i*(i-1);
		}
		for (int i = 2; i <=n; i++) {
			for (int j =3; j <=n; j++) {
				dp[i][j]=dp[i-1][j-1]+dp[i-1][j];
			}
		}
		int sum=0;
		for (int i = 2; i <=n; i++) {
			sum+=dp[n][i];
			
		}
		System.out.println(sum);
    }
}

解题思路

1️⃣.子问题确定:最长上升子序列告诉我们元素最大值在子问题的使用表达中不可忽视,本题目就是以满足条件序列最大值以及序列长度作为子问题进行解决的;

2️⃣.状态:状态数组dp[i][j]表示的含义为:i为所满足条件的序列中的最大值j为序列长度(i 可以不包含在序列中,如i为4、j为3时,231、241均满足条件);

3️⃣.初始状态:当序列长度为2时,即dp[i][2]时,没有所谓的中位数,只有大、小两个数,题目就转换为求排列组合的问题了,即:在i个数中选取2个数进行排列;

4️⃣.状态转移方程
     dp[i][j]=dp[i-1][j-1]+dp[i-1][j]

🥉瓷砖铺放 

 ⚽题目描述

资源限制
时间限制:1.0s   内存限制:512.0MB
问题描述

  有一长度为N(1<=N<=10)的地板,给定两种不同瓷砖:一种长度为1,另一种长度为2,数目不限。要将这个长度为N的地板铺满,一共有多少种不同的铺法?
  例如,长度为4的地面一共有如下5种铺法:
  4=1+1+1+1
  4=2+1+1
  4=1+2+1
  4=1+1+2
  4=2+2
  编程用递归的方法求解上述问题。

⌨输入格式

只有一个数N,代表地板的长度
🔍输出格式
输出一个数,代表所有不同的瓷砖铺放方法的总数
样例输入
  4

样例输出
    5
import java.util.*;
 
public class Main
{
    public static void main(String args[])
    {
        Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		System.out.println(f(n));
	}

		private static int f(int n) {
			if (n==1) {
				return 1;
			}
			if (n==2) {
				return 2;
			}
			else {
				return f(n-1)+f(n-2);
			}
    }
}

解题思路

1️⃣.使用递归方法
2️⃣.递归中,第一块瓷砖要么取长度1的,要么取长度2的
3️⃣.第二块瓷砖要么取长度1的,要么取长度2的,以此类推

        最后再用公式推算即可。

​ 💌最后总结

                简单的题都会,难的题下点功夫:“只要功夫深,铁杵磨成绣花针!”

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。