【算法】纸牌三角形问题的穷举解决方法及其限界优化

C++ P0006--高能酒店 实际楼层=预定楼层-高能楼层 阅读详情


标题:纸牌三角形

A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
下图就是一种排法

这样的排法可能会有很多。

如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?

请你计算并提交该数字。

注意:需要提交的是一个整数,不要提交任何多余内容。

 

解决方法:穷举法

1、先把这个三角形拉成直线

     拿题目中举例的情况作为演示:将其映射到4*4的二位数组里头可以这样:

1682
9 5 
47  
3   

 

     选一个方向(这里为顺时针方向)拉成直线:可得   

     1 6 8 2 5 7 3 4 9

     一共有9个位置,故可设9个变量i[1:9]

       由此题目要求满足的条件可表达为:

       i1+i2+i3+i4 == i4+i5+i6+i7 &&
       i1+i2+i3+i4 == i7+i8+i9+i1 &&
       i4+i5+i6+i7 == i7+i8+i9+i1

 

因为旋转、镜像后相同的算同一种,所以旋转有3种,镜像也有3种,共6种。即是在遍历求得最终结果除以6

基本分析完毕!上代码:

public class 纸牌三角形02 {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        int count = 0;
        for (int i1 = 1; i1 <= 9; i1++) {
            for (int i2 = 1; i2 <= 9; i2++) {
                if (i2 == i1) continue;//从第二位开始开始限界,跳过不满足条件的情况,以达到优化效果。
                for (int i3 = 1; i3 <= 9; i3++) {
                    if (i3 == i2 || i3 == i1) continue;
                    for (int i4 = 1; i4 <= 9; i4++) {
                        if (i4 == i3 || i4 == i2 || i4 == i1) continue;
                        for (int i5 = 1; i5 <= 9; i5++) {
                            if (i5 == i4 || i5 == i3 || i5 == i2 || i5 == i1) continue;
                            for (int i6 = 1; i6 <= 9; i6++) {
                                if (i6 == i5 || i6 == i4 || i6 == i3 || i6 == i2 || i6 == i1) continue;
                                for (int i7 = 1; i7 <= 9; i7++) {
                                    if (i7 == i6 || i7 == i5 || i7 == i4 || i7 == i3 || i7 == i2 || i7 == i1) continue;
                                    for (int i8 = 1; i8 <= 9; i8++) {
                                        if (i8 == i7 || i8 == i6 || i8 == i5 || i8 == i4 || i8 == i3 || i8 == i2 || i8 == i1)
                                            continue;
                                        for (int i9 = 1; i9 <= 9; i9++) {
                                            if (i9 == i8 || i9 == i7 || i9 == i6 || i9 == i5 || i9 == i4 || i9 == i3 || i9 == i2 || i9 == i1)
                                                continue;
                                            if (i1 + i2 + i3 + i4 == i4 + i5 + i6 + i7 &&
                                                    i1 + i2 + i3 + i4 == i7 + i8 + i9 + i1 &&
                                                    i4 + i5 + i6 + i7 == i7 + i8 + i9 + i1) {
                                                count++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        System.out.println(count / 6);//旋转和镜像共有6种相同情况所以除于6
        System.out.println(System.currentTimeMillis() - start);
    }
}

从第二层循环开始我都加了限界条件判断,尽早结束不满足条件的循环,以达到优化效果。(基本在100ms左右)

 

基于STM32设计的老人防摔倒报警设备(OneNet)_65 本文设计了一种基于STM32单片机的智能老人防摔倒报警设备。该系统结合MPU6050陀螺仪传感器实时监测老人的姿态变化,检测摔倒事件;通过SIM800C通信模块发送短信通知紧急联系人,并将GPS定位信息上传至云端平台,确保家属能够及时了解老人的准确位置。 阅读详情

相关推荐

STM32L151C8T6低功耗实战:RTC闹钟唤醒停机模式的配置与优化

本文详细介绍了如何在STM32L151C8T6微控制器上配置与优化RTC闹钟唤醒停机模式,以实现极致的低功耗设计。文章从核心原理出发,结合STM32CubeMX配置实战,深入讲解了进入停机模式前的关键准备工作、唤醒后的系统恢复流程,并分享了将功耗降至个位数微安级的深度优化技巧与常见问题解决方案。

weixin_29166013的博客 301

C++题解(16) 狐猬编程:L4结业测试 第四题:楼层编号

和其他酒店不一样的是,这个酒店每天都有一个高能的数字t,这个数字在楼层中是不会出现的,以t=3为例,则3、13、31、33等楼层是不存在的,楼层编号为1,2,4,5,……所以实际上的4楼才是3楼。已知小林预定了编号为m层的房间,并且当天高能数字是t,现在他想知道房间所在的真实楼层是多少。一行两个整数m和t,1<=m<=100000,0<=t<=9,保证m对t合法。实际楼层:1、2、3、4、5、6、7、8、 9、10、11、12。楼层编号:1、2、4、5、6、7、8、9、10、11、12、14。

2301_78151773的博客 748

《小白入门:无人机电调 ESC 的 PWM 接口特性、主流协议与使用指南》

电调是无人机的 “动力中枢”,其 PWM 接口是入门的基础,而 SBUS、DroneCAN 等协议则代表了更高阶的控制方式。小白学习时,需先掌握 PWM 的基本特性和连接方法,再根据场景选择合适的协议,同时严格遵守使用注意事项(如电源匹配、校准步骤、安全操作)。随着实践深入,逐步理解 “协议差异” 和 “系统协同”,才能让无人机更稳定、安全地飞行。

bother3000的博客 3769

穷举法(例:买鸡)如何优化

穷举法(例:买鸡)如何优化 本文主要为关于优化的思考 公鸡1只5钱,母鸡一只3钱,雏鸡3只一钱,100钱买100只,问多少种方式,运行时间。 最初代码 #include <stdio.h> #include <time.h> const int N=100; int main() { int start=clock(); int a,b,c; for(a=0;a&l...

xiaoxiaojinglinger的博客 968

PICO G2 4K Unity开发环境配置完全指南

VR开发中,Android平台的硬件适配与Unity版本兼容性是基础性技术命题。PICO G2 4K作为基于骁龙845+Android 8.1的专用VR一体机,其开发链路高度依赖特定Unity LTS版本(2020.3.41f1)、NDK r21e及OpenJDK 11等工具链组合,本质是嵌入式Android VR Runtime与Unity IL2CPP ABI的深度对齐问题。该配置方案不仅解决ADB识别、APK签名、Logcat捕获等工程痛点,更支撑手柄6DoF追踪、射线交互、Haptic反馈等核心XR

weixin_30298497的博客 617

uniapp中renderjs实战:手把手教你实现SSE即时通讯(附完整代码)

本文通过一个完整的实战案例,详细讲解了如何在uni-app中使用RenderJS实现SSE即时通讯功能。文章剖析了RenderJS作为Vue视图层强力补充的原理,并提供了包含自动重连、状态管理等健壮性设计的完整代码,帮助开发者突破框架限制,高效集成浏览器原生API。

weixin_29005499的博客 189

穷举法--三角形的个数

问题描述:   输入绳子的长度n,将该绳子分成三段,每段的长度为正整数,输出由该三段绳子组成的三角形的个数; 参考代码: #include using namespace std; int main() { int a,b,c,n,s;   cin>>n;   s=0;   for (a=1;an-2;a++)     for(b=a;bn-2;b++)

漫漫程序路 3557

飞书多维表格+影刀RPA:我如何用3个指令搞定每周的销售数据自动汇总(附完整配置截图)

本文详细介绍了如何利用飞书多维表格和影刀RPA实现销售数据的自动化汇总,通过三个核心指令(建立链接、列出记录、更新记录)简化繁琐的手工操作。文章包含完整的配置截图和实战指南,帮助用户快速部署自动化流程,提升工作效率。

weixin_29273849的博客 285

【c++】楼层编号

楼层编号 时间限制:1秒 内存限制:128M 题目描述 小林在NOIP比赛期间住在“新世界”酒店。和其他酒店不一样的是,这个酒店每天都有一个高能的数字t,这个数字在楼层中是不会出现的,以t=3为例,则3、13、31、33等楼层是不存在的,楼层编号为1,2,4,5,……所以实际上的4楼才是3楼 已知小林预定了编号为m层的房间,并且当天高能数字是t,现在他想知道房间所在的真实楼层是多少 输入描述 一行两个整数m和t,1<=m<=100000,0<=t<=9,保证m对t合法

ruirui118的博客 2847

告别SquareLine!用免费的NXP GUI-Guider为海思3516AV300开发LVGL界面(附完整移植流程)

本文详细介绍了如何利用免费的NXP GUI-Guider工具为海思Hi3516AV300开发LVGL界面,包括环境配置、代码移植和性能优化等全流程实战指南。特别针对二维码组件缺失等常见问题提供解决方案,帮助开发者零成本构建高效嵌入式GUI系统。

weixin_28292761的博客 416

深入瑞芯微SDK:手把手解析Uboot、Kernel到Rootfs的镜像生成与烧录

本文深入解析瑞芯微SDK中从Uboot、Kernel到Rootfs的镜像生成与烧录全流程,揭示编译背后的技术细节。通过详细分析SDK架构、镜像生成流水线、分区表定制、Rootfs构建及烧录科学,帮助开发者从会编译进阶到懂原理,掌握系统级开发的关键技术。

weixin_29193359的博客 271

五大常用算法

五大常用算法思想 前言 据说有人归纳了计算机的五大常用算法,它们是贪婪算法,动态规划算法,分治算法,回溯算法以及分支限界算法。这五个算法是有很多应用场景的,最优化问题大多可以利用这些算法解决。算法的本质就是解决问题。当数据量比较小时,其实根本就不需要什么算法,写一些for循环完全就可以很快速的搞定了,但是当数据量比较大,场景比较复杂的时候,算法就尤为重要了,本文先归纳这几个算法及应用场景,随后在细...

weixin_45439324的博客 2287

CCS安装教程图解说明:可视化步骤快速上手

通过清晰的图解步骤详解CCS安装过程,帮助新手快速掌握环境搭建。结合ccs安装教程与实际操作界面,每一步都直观易懂,大幅降低学习门槛,提升配置效率。

weixin_42611310的博客 963

东北林业大学Acm培训大一(三)(暴力枚举)

Description 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。 Input 输入包括n组测试数据。每组数据包括一行,给出2到15个两两不同且小于100的正整数。每一行最后一个数是0,表示这一行的结束后,这个数不属于那2到15个给定的正整数。 Output 对每组输入数据,输出一行,给出有多少个数对满足其中一个数是另一个数的两倍。 Sampl

沉晨尘宸的博客 1732

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

c++实验4-穷举法解决组合问题

一,问题及代码 /* * 文件名称:实验4 * 作 者: 马鑫鑫 * 完成日期:2017 年4月5日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分:穷举法解决组合问题 * 输入描述:无 * 问题描述:无 * 程序输出: 无 * 问题分析:无 *?算法设计: 无 */ #include using namespace std; int main()

ma980210的博客 776

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

acm新手小白必看系列之(3)——暴力枚举精讲及例题

acm新手小白必看系列之(3)——暴力枚举精讲及例题 这节多说无益直接上题 1·大乐透 在小明曾经玩过的一种对号码的纸牌游戏(乐透)里,玩家必须从{1,2,……,49}中选择6个数。玩Lotto的一个流行策略是(虽然它并不增加你赢的机会):就是从这49个数中,选出k(k>6)个数组成一个子集S,然后只从S里拿出牌来玩几局游戏。例如,k=8,s={1,2,3,5,8,13,21,34},那么有...

永恒之蓝的博客 2866

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

楼层编号

题目描述 小贾在NOIP比赛期间住在某个酒店,和其他酒店不一样的是,这个酒店每天都有一个高能的数字t,这个数字在楼层中是不会出现的,以t=3为例,则3、13、31、33等楼层是不存在的,楼层编号是1245,…所以实际上4楼才是3楼。 已知小贾预定了编号为m的房间,并且当天高能数字是t,现在他想知道房间所在的真实楼层是多少。 输入 一行两个整数m和t,1&lt;=m&lt;=100000,0...

ljqmiao_的博客 3182

三角形-穷举算法

package java操作excel; import java.util.Scanner; /** * 三角形 * 有n根棍子,棍子i长度为ai,想要从中选出3根棍子组合成周长尽量可能长的三角形,请输出最大的周长,若无法组成就输出0. * @author Administrator * *输入n = 5; *a={2,3,4,5,10} *...

weixin_30343157的博客 150

详解C++枚举算法

枚举算法 文章目录什么是枚举1.楼层编号2.冰壶比赛 什么是枚举 枚举,顾名思义,就是用最笨的方法,去解决问题(暴力枚举),一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。 枚举算法是我们在日常中使用到的最多的一个算法,它的核心思想就是: 枚举所有的可能 枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:(1...

weixin_45497223的博客 6456

acm大一寒假集训--暴力枚举类

东北林业大学OJ,点击进入???????????? 题目一:二倍的问题 Description 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍。比如给定1 4 3 2 9 7 18 22,得到的答案是3,因为2是1的两倍,4是2个两倍,18是9的两倍。 Input 输入包括n组测试数据。每组数据包括一行,给出2到15个两两不同且小于100的正整数。每一行最后一个数...

NEFU_kadia的博客 915

NOIP模拟 楼层

1 .楼层 【问题描述】 mxy 感觉新世界的大门打开了。 ta 决定要在新世界的旅馆中找间房住。已知新世界每天都有一个高能的数字t,这个 数字在楼层中是不会出现的。我们以t=3 为例,则3,13,31,33 等楼层是不存在的,楼层编 号为1,2,4,5……,所以实际上的4 楼才是3 楼。 已知mxy 订了编号为m 层的房间,并且当天高能数字是t,现在ta 想知道ta 的房间真 实楼层

闲人请进 839

NOIP2016 的一些记录

第一次NOIP,也是最后一次,在某(ju ruo)省还是应该水到了一等奖,大概记录一下,自己考试的一点状态和感受和吐嘈。 首先,酒店据说是准4星,然后,嗯。厕所门关不上,沙发是歪的,电源插排坏了一次,wifi几乎不可用,窗把手断了一半,卫生间纸抽是送的,床头按钮一大堆不好使,没有灯暖,恩,然后不接着吐嘈了,嘈点太多,,,,,(感觉身体被掏空)。 然后吐嘈一下,去考场还要坐大巴,试完机,回来的时

Gqe 680

[单选题]对下面的表达式描述正确的是: (T/t)(M/m)

[单选题]对下面的表达式描述正确的是: (T/t)(M/m) 表达式出现T或t并且有M或者m 表示两个字符TM、Tm、tM、tm 以字母T或t开头,后面接一个字母M或者m 表达式中有T、t、M、m中任意一个 正确答案: 转载于:https://www.cnblogs.com/pizishui/p/5350970.html...

weixin_30429201的博客 216

楼层实现原理

&lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt;     &lt;meta charset="UTF-8"&gt;     &lt;title&gt;Document&lt;/title&gt;     &lt;style&gt;         *{             m

BeiBeiTian的博客 620

5.14特长生模拟题 楼层

题目 题解 代码题目mxy 感觉新世界的大门打开了。 ta 决定要在新世界的旅馆中找间房住。已知新世界每天都有一个高能的数字t,这个 数字在楼层中是不会出现的。我们以t=3 为例,则3,13,31,33 等楼层是不存在的,楼层编 号为1,2,4,5……,所以实际上的4 楼才是3 楼。 已知mxy 订了编号为m 层的房间,并且当天高能数字是t,现在ta 想知道ta 的房间真 实楼层是多少。(

戒毒戒赌戒网瘾,学习学问学做人——好好学习 568
上一篇: 【算法】接水问题-自己的思考和解决过程。
下一篇: 【算法】整数转Excel地址问题(详细思考过程)
Luoseaspring
博客等级 码龄10年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值