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

😜今日份搞题 😜

🥇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的,以此类推

        最后再用公式推算即可。

 💌最后总结

        距离省赛的时间越来越近了,小伙伴们要加油哇,一起冲向国赛。

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

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二两清酒.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值