当前位置: 首页 > news >正文

第十四届蓝桥杯三月真题刷题训练——第 21 天

目录

第 1 题:灭鼠先锋

问题描述

运行限制

代码:

思路:

第 2 题:小蓝与钥匙

问题描述

答案提交

运行限制

代码:

思路 :

第 3 题:李白打酒加强版 

第 4 题:机房 


第 1 题:灭鼠先锋

问题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

灭鼠先锋是一个老少咸宜的棋盘小游戏,由两人参与,轮流操作。

灭鼠先锋的棋盘有各种规格,本题中游戏在两行四列的棋盘上进行。游戏的规则为:两人轮流操作,每次可选择在棋盘的一个空位上放置一个棋子,或在同一行的连续两个空位上各放置一个棋子,放下棋子后使棋盘放满的一方输掉游戏。

小蓝和小乔一起玩游戏,小蓝先手,小乔后手。小蓝可以放置棋子的方法很多,通过旋转和翻转可以对应如下四种情况:

XOOO XXOO OXOO OXXO
OOOO OOOO OOOO OOOO

其中 O 表示棋盘上的一个方格为空,X 表示该方格已经放置了棋子。

请问,对于以上四种情况,如果小蓝和小乔都是按照对自己最优的策略来玩游戏,小蓝是否能获胜。如果获胜,请用 V 表示,否则用 L 表示。请将四种情况的胜负结果按顺序连接在一起提交。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

代码:

package 第十四届蓝桥杯三月真题刷题训练.day21;

/**
 * @author yx
 * @date 2023-03-24 8:27
 */
public class 灭鼠先锋 {
    public static void main(String[] args) {
        System.out.println("LLLV");
    }
}

思路:

(1)因为这个题目已经把先手的四种情况进行了说明,所以就非常好想

(2)我们只需要找到一种后手下棋思路让先手必输的情况,那对于后手来说就是最优方法

(3)分别在纸上画一下下棋思路即可

第 2 题:小蓝与钥匙

问题描述

小蓝是幼儿园的老师, 他的班上有 28 个孩子, 今天他和孩子们一起进行了 一个游戏。

小蓝所在的学校是寄宿制学校, 28 个孩子分别有一个自己的房间, 每个房 间对应一把钥匙, 每把钥匙只能打开自己的门。现在小蓝让这 28 个孩子分别将 自己宿舍的钥匙上交, 再把这 28 把钥匙随机打乱分给每个孩子一把钥匙, 有 28!=28×27×⋯×1 种分配方案。小蓝想知道这些方案中, 有多少种方案恰有 一半的孩子被分到自己房间的钥匙 (即有 14 个孩子分到的是自己房间的钥匙, 有 14 个孩子分到的不是自己房间的钥匙)。

答案提交

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

代码:

package 第十四届蓝桥杯三月真题刷题训练.day21;

/**
 * @author yx
 * @date 2023-03-24 8:51
 */
public class 小蓝与钥匙 {
    static int N=14;
    public static void main(String[] args) {
        /**
         * 1、先从28个人里面选14个人给定它们的钥匙,一共有C14 28 种选法
         * 2、剩下的14个钥匙分别发给不同的人,使他们拿到的都不是自己的钥匙
         * 3、后半部分属于全错排列问题,用递推来做
         */
        /*
        全错排列问题:f(x)=f(x-1)+f(x-2)
        f(0)=0;
        f(1)=0;
        f(2)=1;
         */
        //排列组合:2006329977
        long C_14_28=paiLie();
        long f1=0;
        long f2=1;
        long temp=0;
        for (int i = 3; i <= 14; i++) {
            temp=f2;
            f2=(i-1)*(f1+f2);
            f1=temp;
        }
        System.out.println(f2*C_14_28);
    }

    //
    static long paiLie(){
        long ans=1;
        for (long i = 0; i < 14; i++) {
            ans=ans*(28-i)/(i+1);
        }
        return ans;
    }
}

思路 :

(1)先从28个人里面选14个人给定它们的钥匙,一共有C14 28 种选法

    static long paiLie(){
        long ans=1;
        for (long i = 0; i < 14; i++) {
            ans=ans*(28-i)/(i+1);
        }
        return ans;
    }

(2)剩下的14个钥匙分别发给不同的人,使他们拿到的都不是自己的钥匙,即全错排问题

(3)全错排公式:f(x)=(N-1) * [f(x-1)+f(x-2)]

(4)推导过程:

  • 首先是初始值:f1=0; f2=1; f3=9这几项是可以自己手撸的
  • 当i>3,很明显手撸不太行,我们静下心来分析,要找其内在的规律
  • 设N个人为a,b,c,d...,N张卡为A,B,C,D...
  • 若a拿b的卡B,b也拿a的卡A,则显然只剩下N-2个人拿卡,自然是f(N-2)种了(好理解)
  • 若a拿b的卡B,b没拿a的卡A,则显然与N-1个人拿卡问题一样,自然是f(N-1)种了(不好理解)
  • 为啥是f(N-1)种呢?注意:这里的b没拿卡A,就相当于在N个数中a没拿卡A一样的道理,在N-1个数字中,b的卡片B被a拿走了,而B又不能拿A,其实就是把卡A变相看作是卡B的平替那是不是就相当于看作了N-1个数字进行错排
  • a不一定拿B,只要是B,C,D...(N-1个)中的一个就可以了,所以在f(N-1)+f(N-2)再乘上N-1就行了.
  • 得出递推公式:f(N)=(N-1)*[f(N-1)+f(N-2)]

第 3 题:李白打酒加强版 

第 4 题:机房 

相关文章:

  • JavaScript到底如何存储数据?
  • 结构体详解
  • 【数据结构与算法】设计循环队列
  • go语言gin框架学习
  • 一个超简单的渐变平行四边形进度条
  • 安装好unity后给unity配置及插件和资源相关的事情
  • docker版jxTMS使用指南:勾连python
  • 值得记忆的STL常用算法,分分钟摆脱容器调用的困境,以vector为例,其余容器写法类似
  • 重学Java设计模式-结构型模式-组合模式
  • Android11以上版本使用高德定位,定位成功,卫星数一直为0
  • 【十二天学java】day06之方法详解
  • Revit明细表计算重量和明细表导出功能
  • 基于飞桨实现的特定领域知识图谱融合方案:ERNIE-Gram文本匹配算法
  • Python实现二叉树递归遍历
  • 如何在 Vue 中使用 防抖 和 节流
  • 高效实施ClickHouse数据备份
  • 关于qt creator手动添加构建套件kit问题
  • 【进阶数据结构】——红黑树
  • 初识进程
  • Mybatis搭建环境及其原理【搭建Mybatis程序】
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉