PAT 5 剪邮票

2023-11-09

剪邮票


如【图1.jpg】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

 请你计算,一共有多少种不同的剪取方法。
请填写表示方案数目的整数。 注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

答案: (19分)



public class Main{
    public static int count = 0 ;       //记录总的方案数
    public static int cut[] = new int[5] ;  //从所有邮票中选出5张从小到大号码不同的邮票,存入该数组中避免选取的邮票出现重复
    public static int visited[] = new int[5] ;  //判断取出的5张邮票是否已经访问
    public static int b[] = {+1,-1,+5,-5} ; //判断取出的5张邮票是否相连,+1表示与右边相连,-1表示左边,+5表示下面,-5表示上面
    public static void main(String[] args) {
        int stamp[] = new int[12] ; //定义所有邮票号码

        for(int i = 1,k = 1 ; i <= 12 ; i++){   //初始化所有的邮票号码为{1,2,3,4,6,7,8,9,11,12,13,15}
            stamp[i-1] = k++  ;
            if(i % 4 == 0){
                k ++ ;
            }
        }

        for(int a = 0 ; a < 12 ; a++){  //通过for循环取出5张邮票,号码从小到大
            for(int b = a + 1 ; b < 12 ; b++){
                for(int c = b + 1 ; c < 12 ; c ++){
                    for(int d = c + 1 ; d < 12 ; d++){
                        for(int e = d + 1 ; e < 12 ; e ++){
                            //将取出的邮票存入cut数组中,保存
                            cut[0] = stamp[a] ;
                            cut[1] = stamp[b] ;
                            cut[2] = stamp[c] ;
                            cut[3] = stamp[d] ;
                            cut[4] = stamp[e] ;
                            for(int i = 0 ; i < 5 ; i++){   //初始化取出的邮票都为未访问状态
                                visited[i] = 0 ;
                            }
                            //开始访问
                            visited[0] = 1 ;    //另cut数组头为已访问状态
                            //从cut数组头开始,判断该方案是否可行
                            find(0) ;   
                            int flag = 1 ;  //当flag为1时可行,否则不可行
                            for(int j = 0 ; j < 5 ; j++){
                                if(visited[j] == 0){    //只要一个数未访问到则说明不可行
                                    flag = 0 ;
                                    break ;
                                }
                            }
                            if(flag == 1){
                                count ++ ;
                            }
                        }
                    }
                }
            }
        }
        System.out.println(count);

    }
    private static void find(int index) {
        for(int i = 0 ; i < 4 ; i++){   //计算出cut[index]上下左右的数
            int tempCut = cut[index] + b[i] ;
            if(tempCut < 1 || tempCut > 14 || tempCut ==5 ||tempCut==10){
                continue ;
            }
            for(int k = 0 ; k < 5 ; k++){   
                if(visited[k]==0&&cut[k]==tempCut){//如果cut数组里有数与tempCut匹配的话,继续查询下一个
                    visited[k] = 1 ;
                    find(k) ;
                }
            }
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PAT 5 剪邮票 的相关文章

  • Distcc

    由于通过google git提取的android源代码没有配置分布式编译 需要借助一些工具搭建一个分布式编译环境来提升android编译速度 下面的步骤是在centos 5 2上进行的 我们可以参考一下 1 安装distcc RPM包 rp

随机推荐

  • impala/spark/hive/presto常见的命令汇总

    1 impala spark常见的命令汇总 常见命令 impala spark sql create语句 CREATE TABLE IF NOT EXISTS my db student name STRING age INT contac
  • #pragma once 是什么意思?

    和头文件中用 ifndef A H define A H Here is code endif 效果类似 包含pragma once语句的文件只会被编译一次 表示在编译的时候 这个文件只被包含 include 一次 这样 可以减少整个编译过
  • PHP框架的基本原理以及选择标准

    PHP框架的原理 说到PHP框架 可能很多PHP新手会感到有些胆怯 其实 PHP框架也不是那么深不可测的 框架就是别人使用PHP基础只是为你写好了的东西 只是封装在一起 这就好比我们使用PHP的函数 函数都是已近写好了的 我们只要按照函数使
  • 图解LeetCode——1812. 判断国际象棋棋盘中一个格子的颜色(难度:简单)

    一 题目 给你一个坐标 coordinates 它是一个字符串 表示国际象棋棋盘中一个格子的坐标 下图是国际象棋棋盘示意图 如果所给格子的颜色是白色 请你返回 true 如果是黑色 请返回 false 给定坐标一定代表国际象棋棋盘上一个存在
  • C/C++

    文章目录 常见面试题目讲解 宏定义 数据声明 类型修饰符的使用总结 位操作 访问固定内存位置 参考 麦子学院 嵌入式C语言高级 C语言函数的使用 常见面试题目讲解 参考 嵌入式程序员应该知道的0x10个基本问题 常见面试题目讲解 宏定义 1
  • Java设计模式——装饰者模式

    装饰者模式 一 概述 装饰者模式 装饰器模式 是一种结构型模式 定义 在不改变现有对象结构的情况下 动态地给该对象增加一些额外职责 功能 的模式 装饰者 Decorator 模式中的角色 抽象构件 Component 角色 定义一个抽象接口
  • 7-44 求整数的位数及各位数字之和

    对于给定的正整数N 求它的位数及其各位数字之和 输入格式 输入在一行中给出一个不超过109的正整数N 输出格式 在一行中输出N的位数及其各位数字之和 中间用一个空格隔开 输入样例 321 输出样例 3 6 include
  • Tomcat流程图分析

    org apache catalina startup Bootstrap 启动类 初始化步骤 从server开始到service connector 后实现了lifecycle 接口 bootstrape init gt catelina
  • Protobuf下载和编译

    系列导航 一 Protobuf下载和编译 二 Protobuf在Java中的简单使用 一 简介 protobuf全称Google Protocol Buffers 是google开发的的一套用于数据存储 网络通信时用于协议编解码的工具库 是
  • C#中导出百万级Excel只需几秒除了NPOI还可以这样

    场景 Winform中通过NPOI导出Excel的三种方式 HSSFWorkbook XSSFWorkbook SXSSFWorkbook 附代码下载 https blog csdn net BADAO LIUMANG QIZHI arti
  • 剪格子 蓝桥杯 211

    题目描述 如下图所示 3 x 3 的格子中填写了一些整数 我们沿着图中的红色线剪开 得到两个部分 每个部分的数字和都是 60 本题的要求就是请你编程判定 对给定的 m n 的格子中的整数 是否可以分割为两个部分 使得这两个区域的数字和相等
  • com.alibaba.fastjson.JSONArray cannot be cast to com.alibaba.fastjson.JSONObject

    json中类型转换问题 是错误的格式 例 JSONObject parseObject type slider show true start 1 end 100 正确的写法 JSONObject dataZoom new JSONObje
  • C# 委托(delegate)

    1 什么是委托 委托是一种引用类型 它是函数指针的托管版本 在C 中 委托是一种可以把引用存储为函数的类型 委托可以引用实例和静态方法 而函数指针只能引用静态方法 委托的声明非常类似于函数 和函数不同的的是委托不带函数体 并且需要Deleg
  • 初识Spring Boot

    目录 一 Spring Boot是什么 二 创建Spring Boot项目 1 使用IDEA创建 2 网页版创建 三 运行项目 一 Spring Boot是什么 简单来说Spring Boot就是Spring的 脚手架 就是一个框架 Spr
  • nodejs libuv学习

    读了一下libuv源代码 简单记录一些见解 https github com libuv libuv libev就是一个基于epoll封装事件的函数库 自身不带有线程池等操作 而libuv则是在libev基础上 加上线程操作的功能 大体运作
  • Java中Array.sort()的几种用法

    转载https www tuicool com articles iii6N3 Java的Arrays类中有一个sort 方法 该方法是Arrays类的静态方法 在需要对数组进行排序时 非常的好用 但是sort 的参数有好几种 下面我就为大
  • 【QT控件大小自适应窗口变化】

    问题 刚开始学习QT时 在窗口中放置一个个控件 而后运行程序 会发现改变窗口大小时 控件大小不随窗口大小变化而变化 导致窗口大小变化没意义 同时也让精心布局看起来很难看 本文提供一种使用BoxLayout中放置控件 所有可见控件能够随窗口大
  • 同仁堂-十大王牌、十大名药

    同仁堂 十大王牌 十大名药 官网 ZY123 com 中医123
  • WPS中编辑Word删除内容之后保存退出了如何恢复?

    目录 一 问题简述 二 Word用户 场景一 情况一 删除了内容没有退出文档 情况二 删除了内容退出文档 情况三 删除了文件退出文档 三 Wps用户 场景二 情况一 删除了内容没有退出文档 情况二 删除了内容退出文档 情况三 删除了文件退出
  • PAT 5 剪邮票

    剪邮票 如 图1 jpg 有12张连在一起的12生肖的邮票 现在你要从中剪下5张来 要求必须是连着的 仅仅连接一个角不算相连 比如 图2 jpg 图3 jpg 中 粉红色所示部分就是合格的剪取 请你计算 一共有多少种不同的剪取方法 请填写表