第四篇 枚举思想

一: 思想

有时我们解决某个问题时找不到一点规律,此时我们很迷茫,很痛苦,很蛋疼,突然我们灵光一现,发现候选答案的问题规模在百万之内,

此时我们就想到了从候选答案中逐一比较,一直找到正确解为止。

二: 条件

前面也说了,枚举是我们在无奈之后的最后一击,那么使用枚举时我们应该尽量遵守下面的两个条件。

①   地球人都不能给我找出此问题的潜在规律。

②   候选答案的集合是一个计算机必须能够承受的。

三:举例

下面是一个填写数字的模板,其中每个字都代表数字中的”0~9“,那么要求我们输入的数字能够满足此模板。

思路1):对“算”“法”“洗”“脑”“题”分别进行枚举,复杂度达到了O(n5)。

//“算”字的取值范围
            for (int i1 = 1; i1 < 10; i1++)
            {
                //“法”字的取值范围
                for (int i2 = 0; i2 < 10; i2++)
                {
                    //“洗”字的取值范围
                    for (int i3 = 0; i3 < 10; i3++)
                    {
                        //"脑"字的取值范围
                        for (int i4 = 0; i4 < 10; i4++)
                        {
                            //"题"字的取值范围
                            for (int i5 = 1; i5 < 10; i5++)
                            {
                                count++;

                                //一个猜想值
                                var guess = (i1 * 10000 + i2 * 1000 + i3 * 100 + i4 * 10 + i5) * i1;

                                //最终结果值
                                var result = i5 * 100000 + i5 * 10000 + i5 * 1000 + i5 * 100 + i5 * 10 + i5;

                                if (guess == result)

思路2):对乘积“算算算算算算”和被乘数“算”进行枚举,复杂度达到了O(n2)。

//商
            int[] resultArr = { 111111, 222222, 333333, 444444, 555555, 666666, 777777, 888888, 999999 };

            //除数
            int[] numArr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            int count = 0;

            for (int i = 0; i < resultArr.Count(); i++)
            {
                for (int j = 0; j < numArr.Count(); j++)
                {
                    count++;

                    var result = resultArr[i].ToString();

                    var num = numArr[j].ToString();

                    var origin = (resultArr[i] / numArr[j]).ToString();

                    if (origin.LastOrDefault() == result.FirstOrDefault()
                        && origin.FirstOrDefault() == num.FirstOrDefault()
                        && result.Length - 1 == origin.Length)
时间: 2024-10-12 15:34:48

第四篇 枚举思想的相关文章

cocos2d-x 3.2 之 2048 —— 第四篇 ★ 核心 ★

***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** 大家十一过得肿么样啊~ 我现在的情况就是--每逢佳节 胖三斤 啊 ,胖三斤..o(╯□╰)o.. 好了,继续做2048, 这是第四篇啦~ 这篇的内容就是对触摸的处理哟~ 就是,你上下左右滑动,相应移动~ 我们先在 游戏的宏定义类 中,建立一个枚举方向变量: Game

web前端入坑第四篇:你还在用 jQuery?

web前端入坑第四篇:你还在用 jQuery? 大妈都这么努力,我们有几个人回家还看书的? 先来补齐[web前端入坑系列]前三篇的连接web前端入坑系列:点击标题进入第一篇: web 前端入坑第一篇:web前端到底是什么?有前途吗第二篇: web前端入坑第二篇:web前端到底怎么学?干货资料!第三篇:web前端入坑第三篇 | 一条"不归路" - 学习路线! 再说这个话题之前,我们先来扫盲普及一下 [jquery] 到底是什么以及它火爆将近十年的重要原因. [ 重新认识 - Jquery

第十四篇 现象

第十四篇  现象 "现象"的产生是由宇宙当中各种因素交汇的结果.现象是万物在宇宙中的展现,它可以被人为创造,也可以由宇宙规律自行产生.现象能帮助人类逐步地了解宇宙的本质,也能帮助人类更好地了解自己. 当一个生命对宇宙有足够高度的认识之后就会留意所有的现象,并从这些现象当中去探索自身以及宇宙的奥秘.可以说,生命的成长过程就是不断地分析与探索各种现象,从而总结经验,让自身不断提高探索宇宙奥秘能力的一个历练过程. 随着对各种现象的不断分析与探索,人类会越来越深刻地认识到现象背后的本质,而不会

shell第四篇(上)

第四篇了解Shell 命令执行顺序分析 Shell 从标准输入或脚本中读取的每一行称为管道(pipeline);它包含了一个或多个命令(command),这些命令被一个或多个管道字符(|)隔开 事实上还有很多特殊符号可用来分隔单个的命令:分号(;).管道(|).&.逻辑AND (&&),还有逻辑OR (||).对于每一个读取的管道,Shell都回将命令分割,为管道设置I/O,并且对每一个命令依次执行下面的操作: 整个步骤顺序如上图所示,看起来有些复杂. 当命令行被处理时,每一个步骤

Eclipse插件开发 学习笔记 PDF 第一篇到第四篇 免分下载 开发基础 核心技术 高级进阶 综合实例

<<Eclipse插件开发 学习笔记>>,本书由浅入深.有重点.有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章.第一篇介绍Eclipse平台界面开发的基础知识.包含SWT控件的使用.界面布局.事件处理等内容:第二篇是插件开发核心技术,主要介绍插件开发的核心知识要点,包含行为(Action).视图(ViewPart).编辑器(Editor).透视图(Perspective)等10章的内容.第三篇主要讲述插件开发的高级内容,包含开发高级内容.富client平台技术(R

关于shell脚本基础编程第四篇

shell脚本基础编程第四篇本章主要内容:函数 函数 function:             function 名称 { 命令 ; } 或 name () { 命令 ; }           定义 shell 函数.               创建一个以 NAME 为名的 shell 函数.当作为一个简单的命令启用时,           NAME 函数执行调用 shell 的上下文中的 COMMANDs 命令.当 NAME           被启用时,参数作为 $1...$n 被传递

cocos2d-x 3.2 之 三消类游戏——万圣大作战 (第四篇)

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 呼呼,第四篇咯, 本篇主要讲述 > 时间 > 分数 本篇结束后,整个三消游戏的基本步骤就搞定了 1. 添加时间 一般消除类游戏,要么关卡,要么限制时间,但是关卡的设计很麻烦,个体创作,没有那么多精力, 所以只能通过限制时间来使游戏有些可玩性,但这种可玩性极低啊

认识元数据和IL(中)&lt;第四篇&gt;

书接上回[第二十四回:认识元数据和IL(上)],我们对PE文件.程序集.托管模块,这些概念与元数据.IL的关系进行了必要的铺垫,同时顺便熟悉了以ILDASM工具进行反编译的基本方法认知,下面是时候来了解什么是元数据,什么是IL这个话题了,我们继续. 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有<第一回:恩怨情仇:is和as>那么迅速,但是Metadata和IL却是绝对重量级的内容,值得我们在任何时间关注

Servlet 2.4 规范之第四篇:Servlet上下文

SRV.3.1    ServletContext接口说明 ServletContext接口定义了运行servlet的web应用中和servlet相关的视图信息.容器提供者负责提供ServletContext的一套具体实现.通过ServletContext对象,servlet能记录事件.获得资源引用,以及设置和保存当前context上其他servlet的一些属性信息. ServletContext以web应用的某一路径为根节点,例如,servlet上下文能写成http://www.mycorp.