枚举算法一综述
- 格式:ppt
- 大小:972.00 KB
- 文档页数:5
枚举算法介绍
枚举算法是一种简单直接的算法,它通过枚举所有可能的情况来
求解问题。
这种算法通常应用于问题空间较小的情况下,它可以帮助
我们找到最优解或者满足特定条件的解。
举个例子,如果我们要在一个整数数组中找到两个数之和等于目
标值,我们可以用枚举算法来解决。
具体做法是枚举数组中的每一对数,检查它们的和是否等于目标值。
枚举算法还有很多应用,比如在图论中,我们可以用枚举来找到
最短路径或者最小生成树;在组合数学中,我们可以用枚举来计算排
列组合数等等。
虽然枚举算法看起来简单,但是在实际应用中,需要注意时间复
杂度,因为枚举所有情况可能需要很长的时间。
因此,在实际应用中,我们需要合理利用剪枝等技巧来优化算法效率,并尽量避免使用不必
要的枚举。
枚举算法枚举对象的过程1.引言1.1 概述枚举算法是一种常用的计算方法,用于遍历和列举对象集合中的所有可能情况。
不论是解决实际问题还是探索数学理论,枚举算法都扮演着重要的角色。
在枚举算法中,我们通过系统地穷举所有可能的选择,来找到问题的解或者确定问题的特征。
通过逐个枚举的方式,我们可以找到问题的所有可能解,或者通过将问题规约为子问题进行递归枚举。
枚举算法的应用非常广泛。
在计算机科学中,枚举算法被广泛应用于组合优化、图论、密码学、人工智能等各个领域。
在实际问题中,枚举算法可以用于穷举搜索问题的解空间,如在旅行商问题中找到最短路径,或者在密码破解中尝试所有可能的密码组合。
尽管枚举算法能够穷举所有可能情况,但其效率通常较低,特别是在问题规模较大时。
因此,在实际应用中,我们需要对枚举算法进行优化,以提高算法的执行效率。
本文将首先介绍枚举算法的定义和原理,包括枚举的基本思想和常用的枚举方法。
接着,我们将探讨枚举算法在不同应用场景中的具体应用和实例。
最后,我们将总结枚举算法的优缺点,并展望其未来的发展前景。
通过深入理解和掌握枚举算法,我们可以更好地应对实际问题和计算机科学中的各种挑战。
无论是在学术研究还是工程实践中,枚举算法都具备着重要的价值和应用前景。
现在让我们开始探索枚举算法的奇妙之旅吧!1.2 文章结构:本文的主要目的是介绍枚举算法枚举对象的过程。
文章将分为三个主要部分来展开讨论:引言、正文和结论。
在引言部分,首先将对整篇文章的概述进行简要介绍,概述枚举算法枚举对象的基本概念和原理。
接着,会给出文章的结构安排,说明各个章节的内容和目的。
最后,明确文章的目的,即为读者提供关于枚举算法的全面了解。
正文部分将重点介绍枚举算法的定义和原理。
首先,会详细解释什么是枚举算法,并介绍枚举算法的基本原理和相关概念。
然后,会通过一些具体例子,阐述枚举算法的具体应用场景,让读者能够更好地理解算法的运作过程和实际应用。
在结论部分,将对枚举算法的优缺点进行总结和评价。
c++算法基础枚举知识点总结标题:C++算法基础:枚举知识点总结一、枚举的基本概念枚举(Enumeration),简称enum,是C++中的一种基本数据类型。
它是一种特殊的整型数据,用于表示一组命名的常量。
枚举类型的值不能被修改,它们在编译时就被确定。
二、枚举的声明和使用枚举类型的声明通常如下所示:```cppenum EnumName {value1,value2,...valueN};```其中,EnumName是枚举类型的名字,value1, value2, ..., valueN是枚举类型的元素。
每个元素都是一个常量,其默认值从0开始依次递增。
例如:```cppenum Color {Red, Green, Blue};```在这个例子中,Color是一个枚举类型,它有三个元素:Red, Green和Blue,它们的值分别是0, 1和2。
三、枚举的使用我们可以通过枚举名来引用枚举元素,也可以通过枚举元素的值来引用它。
```cppColor c = Red;cout << c; // 输出0c = 1;cout << c; // 输出1```在这个例子中,我们首先通过枚举名Color和元素名Red来初始化变量c,然后通过枚举元素的值1来改变c的值。
四、带初始值的枚举我们可以为枚举元素指定初始值,如:```cppenum Color {Red = 1, Green = 3, Blue = 5};```在这个例子中,Red, Green和Blue的值分别为1, 3和5。
五、枚举的作用域枚举的作用域与其定义的位置有关。
如果枚举是在函数内部定义的,那么它只能在该函数内部使用;如果枚举是在类内部定义的,那么它只能在该类内部使用;如果枚举是在文件的全局作用域中定义的,那么它可以在整个文件中使用。
六、枚举的应用枚举在程序设计中有广泛的应用,比如表示星期、颜色、状态等。
使用枚举可以使代码更易于理解和维护,同时也可以避免一些错误的发生。
枚举enums-概述说明以及解释1.引言1.1 概述枚举(enums)是一种常见的数据类型,用于定义一组有限的具名值。
在许多编程语言中,枚举提供了一种方便的方式来表示一系列相关的常量。
它们可以帮助我们更好地组织和理解代码,使得代码更加可读、可维护和可靠。
枚举类型由一组事先定义好的枚举成员组成。
每个枚举成员都有一个与之关联的名称和一个对应的值。
这些枚举成员的值是唯一且不可变的,可以用来代表某种状态、类型或其他特定的常量值。
枚举在编程中有广泛的应用,特别是在需要表示一组相关的选项或状态的场景中。
例如,当我们需要表示一周中的星期几时,可以使用枚举来定义七个枚举成员,分别代表星期一到星期日。
这样,我们在代码中引用这些枚举成员时就能够更加清晰地表达我们的意图,而不是直接使用数字或字符串。
在本文中,我们将探讨枚举的定义和作用,以及它们在实际编程中的使用场景。
我们将深入了解枚举的语法和特性,并通过实例来说明如何使用枚举来提高代码的可读性和可维护性。
接下来的章节将介绍枚举的定义和使用场景,并通过实际示例来说明它们的实际应用。
最后,我们将对枚举的概念进行总结,并展望未来对枚举的进一步探索和应用。
让我们一起深入学习和探讨枚举的世界吧!文章结构部分的内容如下:文章结构部分旨在向读者介绍整篇文章的组织框架和各个章节的内容概览。
通过清晰地呈现文章的结构,读者可以更好地理解和跟随整个论述逻辑。
本篇长文的文章结构如下:1. 引言- 1.1 概述- 1.2 文章结构- 1.3 目的2. 正文- 2.1 枚举的定义和作用- 2.2 枚举的使用场景3. 结论- 3.1 总结- 3.2 对枚举的展望引言部分首先概述了本篇长文的主题-枚举的概念和应用。
紧接着,文章结构部分将详细介绍本篇长文的组织框架。
最后,明确了编写此篇长文的目的。
正文部分通篇探讨了枚举的定义和作用,以及枚举在实际应用中的使用场景。
读者将会理解枚举的概念、特性以及为什么使用枚举能够更加有效地解决问题。
枚举算法举例范文枚举算法是一种简单直接的算法,它通过穷尽所有可能的情况来寻找问题的解。
下面,我将为您举例几种常见的枚举算法。
1.全排列:全排列是指将一组元素进行重新排列,使得每一种排列情况都列举出来。
简单来说,就是将给定的一组数字按照不同的顺序排列,得到所有可能的结果。
例如,给定数字1、2、3,其全排列为123、132、213、231、312、321共计6种。
2.子集枚举:子集枚举是指将给定的一组元素进行组合,列举出所有的可能子集。
例如,给定集合{A,B,C},其可能的子集为{{},{A},{B},{C},{A,B},{A,C},{B,C},{A,B,C}}共计8种。
3.暴力法:暴力法是一种通过穷举所有可能的解来解决问题的算法。
这种算法通常用于问题规模较小、时间要求不高的情况。
例如,寻找一个字符串中的最长回文子串,可以通过穷举所有可能的子串,并判断每个子串是否为回文来找到最长的回文子串。
4.图的全局枚举:图的全局枚举是指对给定的图进行遍历,列举出所有可能的路径或者解。
例如,给定一个有向图,要求从图中选择一条路径,使得路径上的节点数量最多。
可以通过遍历图中的所有节点,依次尝试每个节点作为起点,然后遍历其它节点,找到最长的路径。
5.穷举:穷举是指使用穷举的方式问题的解。
例如,解决数独问题时,可以通过穷举法将每个空格填入1到9的数字,然后判断是否满足数独的规则,直到找到一个合法的解为止。
需要注意的是,枚举算法通常会遍历所有的可能情况,因此其时间复杂度可能较高。
在解决问题时,我们需要根据问题规模和时间要求选择适当的算法。
希望以上例子对您有所启发,更深入地理解枚举算法的使用方法和原理。
枚举问题知识点总结一、枚举问题的定义枚举问题是指通过遍历所有可能的情况,找出所需结果的一类数学问题。
通常来说,枚举问题可以分为两类:一是在已知条件下求解未知问题,例如排列组合、求解最优解等;二是在未知条件下求解已知问题,例如密码破解、密码学等。
二、枚举问题的性质1. 可计算性:枚举问题在理论上是可计算的,通过遍历所有可能的情况来寻找解决方案。
2. 时间复杂度:枚举问题通常会伴随着高时间复杂度,特别是在问题规模较大时,需要耗费较长时间来进行计算。
3. 空间复杂度:枚举问题在求解过程中会占用较大的空间,需要存储所有可能的情况,并进行比较和分析。
三、枚举问题的应用1. 组合数学:在组合数学中,枚举问题经常用于求解排列组合、子集问题等,例如有多少种不同的排列方式、有多少种不同的子集组合等。
2. 最优解问题:在求解最优解问题时,枚举方法是经常使用的一种解决方案,通过遍历所有可能的情况来寻找最优解。
3. 密码破解:在密码学中,枚举方法可以用于破解密码,通过遍历所有可能的密码组合来寻找正确的密码。
四、枚举问题的解题方法1. 遍历法:枚举问题的解题方法之一是遍历法,通过循环遍历所有可能的情况来寻找解决方案。
2. 递归法:递归法是枚举问题的另一种解题方法,通过递归的方式来遍历所有可能的情况并寻找解决方案。
3. 剪枝法:在解决枚举问题时,剪枝法是一种常用的优化方法,通过对可能情况进行排除和精简,减少计算量和提高效率。
五、枚举问题的实例1. 求解排列组合问题:例如求解 n 个元素的排列有多少种不同的方式,求解 n 个元素的组合有多少种不同的方式。
2. 求解最优解问题:例如求解 n 个元素的最大子序列和、求解 0-1 背包问题等。
3. 密码破解:例如通过暴力破解的方式来遍历所有可能的密码组合,寻找正确的密码。
六、总结枚举问题在数学中具有重要的地位,它涉及到多个领域的知识和技巧。
通过本文对枚举问题的定义、性质、应用以及解题方法的总结和讲解,希望读者能够对枚举问题有更深入的理解,并且在解答相关问题时能够更加得心应手。
可以枚举算法枚举算法,即穷举法,是一种常用的计算机算法,通过遍历所有可能的解空间来寻找问题的解。
它适用于问题规模较小且解的个数有限的情况,可以帮助我们快速找到问题的解答。
下面将介绍枚举算法的原理、应用场景以及优化方法。
一、枚举算法的原理枚举算法的原理很简单,即通过循环遍历所有可能的解,然后根据问题的约束条件进行筛选,最终得到满足条件的解。
它的基本步骤如下:1. 确定问题的解空间,即问题的可能解的范围。
2. 使用循环语句遍历解空间中的所有可能解。
3. 对每个可能解进行约束条件的判断,筛选出满足条件的解。
二、枚举算法的应用场景枚举算法适用于以下场景:1. 求解离散空间中的问题,如排列组合、子集等。
2. 求解问题的所有可能解,如密码破解、数独等。
3. 求解问题的最优解,通过枚举所有可能解来寻找最优解。
三、枚举算法的优化方法枚举算法在问题规模较大时,可能会导致计算量巨大,因此需要进行优化。
以下是一些常用的优化方法:1. 剪枝:通过判断某些情况下无需再继续搜索,从而减少计算量。
例如,在搜索排列组合问题时,可以根据之前已经选择的元素来排除一些不必要的情况。
2. 降低时间复杂度:可以通过改变问题的表达方式,从而减少循环次数。
例如,在搜索某个范围内的素数时,可以使用筛法来排除非素数,从而减少循环次数。
3. 增加剪枝条件:通过增加一些额外的约束条件,来减少搜索空间。
例如,在搜索数独的解时,可以根据已经填入的数字来缩小可能解的范围。
总结:枚举算法是一种常用的计算机算法,通过遍历所有可能的解空间来寻找问题的解。
它适用于问题规模较小且解的个数有限的情况,可以帮助我们快速找到问题的解答。
在应用枚举算法时,我们可以根据问题的约束条件来对解空间进行剪枝,从而减少计算量。
另外,通过改变问题的表达方式和增加额外的约束条件,也可以进一步优化枚举算法。
枚举法⼀,枚举算法的思想:1,枚举算法的定义:在进⾏归纳推理时,如果逐个考察了某类事件的所有可能情况,因⽽得出⼀般结论,那么该结论是可靠的,这种归纳⽅法叫做枚举法。
2,枚举算法的思想是:将问题的所有可能的答案⼀⼀列举,然后根据条件判断此答案是否合适,保留合适的,舍弃不合适的。
3,使⽤枚举算法解题的基本思路如下:(1)确定枚举对象、范围和判定条件。
(2)逐⼀枚举可能的解并验证每个解是否是问题的解。
4,枚举算法步骤:(1)确定解题的可能范围,不能遗漏任何⼀个真正解,同时避免重复。
(2)判定是否是真正解的⽅法。
(3)为了提⾼解决问题的效率,使可能解的范围将⾄最⼩,5,枚举算法的流程图如下所⽰:⼆,枚举算法实例例⼀:百钱买⽩鸡1,问题描述:公鸡每只5元,母鸡每只3元,三只⼩鸡1元,⽤100元买100只鸡,问公鸡、母鸡、⼩鸡各多少只?2,算法分析:利⽤枚举法解决该问题,以三种鸡的个数为枚举对象,分别设为mj,gj和xj,⽤三种鸡的总数(mj+gj+xj=100)和买鸡钱的总数(1/3*xj+mj*3+gj*5=100)作为判定条件,穷举各种鸡的个数。
例⼆:使⽤枚举法解决“填写运算符问题”1,问题描述:在下⾯的算式中,添加“+”、“-”,“*”,“/”,4个运算符,使得这个式⼦成⽴。
5 5 5 5 5=52,算法分析:上述式⼦左侧有5个数字,⼀共需要4个运算符。
根据题⽬要求,两个数字之间的运算符只能有4中选择。
在具体编程时,可以通过循环来填⼊各种运算符,然后再判断算式左侧的值是否等于右侧的值。
并保证,当填⼊的是除号时,则右侧的数不能为0,并且乘除的优先级⾼于加减的优先级。
三,算法实现:例⼀:百钱买⽩鸡1. #include<iostream>2. using namespace std;3. int main()4. {5. int mj=0, gj=0, xj=0; //定义变量分别表⽰母鸡、公鸡、⼩鸡并初始化6. for (gj = 0; gj <= 20; gj++) //公鸡最多可买20个7. {8. for (mj = 0; mj <= 33; mj++) //母鸡最多可买33个9. {10. xj = 100 - gj - mj; // 三种鸡的总数是100只11. if (xj % 3 == 0 && 5 * gj + 3 * mj + xj / 3 == 100) // 总花费为100元。
python枚举算法Python枚举算法是一种常用的算法,在编写程序时可以提高代码的效率和可读性。
枚举算法是一种穷举算法,通过遍历所有可能的情况来寻找问题的解决方案。
在Python中,枚举算法通常使用for循环结构进行实现。
一、枚举算法的基本概念枚举算法是一种穷举算法,它通过遍历所有可能的情况来寻找问题的解决方案。
在计算机科学中,枚举通常用于解决组合问题和排列问题。
例如,在一个由10个元素组成的数组中查找特定元素时,可以使用枚举算法来遍历整个数组并查找目标元素。
二、Python枚举函数在Python中,有一个内置函数叫做enumerate(),它可以将一个可迭代对象转换为一个包含索引和值对的枚举对象。
该函数返回一个迭代器对象,每个迭代器对象都包含两个值:索引和对应该索引位置上元素的值。
enumerate()函数语法如下:enumerate(iterable, start=0)其中iterable是要转换为枚举对象的可迭代对象;start是指定开始计数时所使用的数字,默认为0。
例如:fruits = ['apple', 'banana', 'orange']for index, fruit in enumerate(fruits):print(index, fruit)输出结果为:0 apple1 banana2 orange三、Python枚举算法的实现在Python中,枚举算法通常使用for循环结构进行实现。
下面是一个使用枚举算法查找数组中最大元素的示例代码:def find_max(array):max_value = array[0]for value in array:if value > max_value:max_value = valuereturn max_valuearray = [3, 7, 2, 8, 1]max_value = find_max(array)print(max_value)输出结果为:8四、Python枚举算法的应用场景1. 查找列表中的最大值或最小值。
python枚举算法枚举算法是一种常见的计算机算法,它的主要思想是通过枚举所有可能的情况来寻找最优解。
在Python中,枚举算法可以通过循环和条件语句来实现。
枚举算法的应用非常广泛,例如在搜索引擎中,我们可以通过枚举所有可能的搜索结果来找到最优的结果;在游戏中,我们可以通过枚举所有可能的走法来找到最优的策略。
在Python中,枚举算法可以通过for循环来实现。
例如,我们要枚举一个列表中的所有元素,可以使用以下代码:```lst = [1, 2, 3, 4, 5]for i in lst:print(i)```这段代码会依次输出列表中的每个元素。
在枚举算法中,我们通常需要对每种情况进行判断,以找到最优解。
在Python中,可以使用if语句来实现。
例如,我们要找到一个列表中的最大值,可以使用以下代码:```lst = [1, 2, 3, 4, 5]max_num = lst[0]for i in lst:if i > max_num:max_num = iprint(max_num)```这段代码会依次比较列表中的每个元素,找到最大值并输出。
除了for循环和if语句,Python还提供了一些内置函数来帮助实现枚举算法。
例如,可以使用enumerate函数来同时枚举列表中的元素和它们的下标。
例如:```lst = [1, 2, 3, 4, 5]for i, num in enumerate(lst):print(i, num)```这段代码会依次输出列表中每个元素的下标和值。
枚举算法是一种非常常见的计算机算法,它可以通过循环和条件语句来实现。
在Python中,我们可以使用for循环、if语句和内置函数来实现枚举算法。
算法中的枚举法1. 什么是枚举法?枚举法(Enumeration)是一种常用的算法思想,也是计算机科学中最基本、最直接的算法之一。
它通过穷举所有可能的解空间,逐个检验每个解是否符合问题要求,从而找到问题的解。
在计算机科学中,枚举法通常用来解决那些问题空间较小、规模较小的情况。
它适用于那些可以通过穷举所有可能性来找到解决方案的问题。
2. 枚举法的基本思想枚举法的基本思想是通过遍历所有可能的解空间,依次检查每个解是否满足问题要求。
具体步骤如下:1.确定问题的解空间:首先需要确定问题的解空间,即所有可能成为问题解答的集合。
2.遍历解空间:使用循环结构遍历解空间中所有可能的值。
3.检验每个值是否满足问题要求:对于每个值,需要进行一系列判断和条件测试,以确定其是否符合问题要求。
4.找到满足要求的值:如果某个值满足了所有条件和要求,则认为它是问题的解。
5.输出解:将满足要求的值输出作为问题的解答。
3. 枚举法的应用场景枚举法适用于那些问题空间较小、规模较小的情况。
常见的应用场景包括:•寻找最优解:通过枚举所有可能的解,找到最优解或者近似最优解。
例如,在旅行商问题中,可以通过枚举所有可能的路径来找到最短路径。
•判断问题是否有解:通过枚举法可以判断某个问题是否有解。
例如,在数独游戏中,可以通过穷举所有可能的数字组合来判断是否存在可行解。
•穷举搜索:对于一些小规模问题,使用穷举法可以快速找到所有可能的解。
例如,在密码破译中,可以通过穷举法尝试所有可能的密码组合。
4. 枚举法的优缺点4.1 优点•直观易懂:枚举法是一种直接遍历所有可能性的方法,思路清晰,易于理解和实现。
•可靠性高:由于枚举法会遍历所有可能性,并逐个检验每个值是否符合要求,因此能够保证找到满足条件的解(如果存在)。
4.2 缺点•效率低:由于枚举法需要遍历所有可能的解空间,当问题规模较大时,计算量会非常大,效率较低。
•穷举所有情况:枚举法会穷举所有可能的解空间,包括那些明显不符合要求的解。
Python枚举算法1. 概述枚举算法(Enumeration Algorithm)是一种用于生成和列举所有可能情况的方法。
在计算机科学中,枚举算法广泛应用于解决各种组合优化问题、计算组合数等领域。
在Python编程语言中,我们可以使用标准库中的enum模块来实现枚举算法。
本文将详细介绍Python枚举算法的工作原理、使用方法以及一些常见的应用场景。
2. 工作原理枚举算法的基本思想是通过穷举的方式,将可能的情况都列举出来。
在Python中,我们可以使用enum模块来定义枚举类型,然后使用循环和条件判断等语句来生成和列举所有可能的情况。
下面是一个示例代码,演示了如何使用enum模块定义一个简单的枚举类型:from enum import Enumclass Color(Enum):RED = 1GREEN = 2BLUE = 3在上述代码中,我们定义了一个名为Color的枚举类型,它包含了三个取值:RED、GREEN和BLUE。
这样,我们就可以使用这个枚举类型来表示一组有限的颜色。
接下来,我们可以使用循环和条件判断等语句来生成和列举所有可能的颜色情况:for color in Color:print(color)运行上述代码,输出结果为:Color.REDColor.GREENColor.BLUE3. 使用方法3.1 定义枚举类型使用enum模块定义枚举类型非常简单,只需要创建一个继承自Enum的类,并在类中定义枚举成员即可。
from enum import Enumclass MyEnum(Enum):MEMBER1 = 1MEMBER2 = 2...在上述代码中,我们创建了一个名为MyEnum的枚举类型,并定义了两个枚举成员MEMBER1和MEMBER2。
3.2 遍历枚举成员通过遍历枚举类型,可以获取到其中定义的所有枚举成员。
我们可以使用for循环来实现遍历,也可以使用list()函数将枚举类型转换为列表。
枚举算法_举例范文枚举算法是一种用于计算机程序中的算法,其主要思想是通过一一列举所有可能的解,然后逐个验证这些解是否满足条件。
枚举算法在很多问题中都应用广泛,特别是那些问题的解空间相对较小的情况下。
下面我将举几个例子来说明枚举算法的应用。
1.找出一个数的所有因子:枚举算法可以用来找出一个数的所有因子。
例如,对于数值n,我们可以从1开始逐个枚举到n,判断是否能整除n。
如果能整除,则该数是n的一个因子。
通过这种方法,可以找到n的所有因子。
2.找出一个数的所有素因子:枚举算法也可以用来找出一个数的所有素因子。
首先,我们可以枚举数值n的所有因子,然后再判断这些因子是否为素数。
如果是素数,则是n的一个素因子。
通过这种方法,可以找到n的所有素因子。
3.寻找数组中的最大/最小值:枚举算法可以用来寻找数组中的最大/最小值。
例如,对于一个包含n个元素的数组,我们可以分别枚举数组中的所有元素,并逐个比较,找出最大/最小值。
4.找出两个数的最大公约数:枚举算法可以用来找出两个数的最大公约数。
首先,我们可以枚举两个数的所有公约数,并记录最大的公约数。
通过这种方法,可以找出两个数的最大公约数。
5.找出两个数的最小公倍数:枚举算法也可以用来找出两个数的最小公倍数。
首先,我们可以枚举两个数的所有倍数,并记录最小的倍数。
通过这种方法,可以找出两个数的最小公倍数。
这些例子只是枚举算法的一小部分应用,实际上,枚举算法在计算机程序中的应用非常广泛。
在解决问题时,我们可以根据问题的特点来选择合适的枚举方法,通过逐个枚举所有可能的解,找到符合条件的解。
枚举算法总结 (2011-09-16 12:13)分类:数据结构与算法这篇是转载的,昨天学习枚举算法时,也借鉴了这篇文章的思想,觉得很不错,就转载了嘿嘿。
我们总得枚举(enumeration)笨笨的,很多人就称之为“暴力算法(brute force enumeration)”;但是枚举却又总是我们面对算法问题时的第一反应。
这让我想起很多生活在我们身边关心着我们的人,我们对他们总有点或烦或平淡无奇以致讨厌,但是我们却离不开,比如唠叨的老爸老妈。
首先我们看一看枚举思想的威力吧,我们就是通过这个例子,感悟(perceive)到了枚举只要运用得好,一点都不笨。
Pro.1 George likes arithmetics very much. Especially he likes the natural numbers series. His most favourite thing is the infinite sequence of digits, which results as the concatenation of all natural numbers in ascending order. The beginning of this sequence is 1234567891011121314… Let us call this sequence S. Then S[1] = 1, S[2] = 2, …, S[10] = 1, S[11] = 0, …, and so on.George takes a sequence of digits A and wants to know when it first appears in S. Help him to solve this difficult problem.InputThe first line contains A - the given sequence of digits. The number of digits in A does not exceed 200.OutputOutput the only number - the least k such that A[1] = S[k], A[2] = S[k+1], ... A[len(A)] = S[k + len(A) – 1], where len(A) denotes the length of A (i.e. the number of digits in it). SampleProblem Author: Nikita ShamgunovProblem Source: ACM ICPC 2001. Northeastern European Region, Northern Subregion题目的大致意思就是说,给一个很长的数字串S:123456891011121314…,它是由所有的自然数从小到大依次排列起来的。