搜索算法
数据结构最基础的十大算法

数据结构最基础的十大算法数据结构是计算机科学中的重要分支,它研究如何组织和存储数据以便于访问和修改。
在数据结构中,算法是解决问题的关键。
下面将介绍数据结构中最基础的十大算法。
1. 线性搜索算法线性搜索算法是最简单的算法之一,它的作用是在一个列表中查找一个特定的元素。
该算法的时间复杂度为O(n),其中n是列表中元素的数量。
2. 二分搜索算法二分搜索算法是一种更高效的搜索算法,它的时间复杂度为O(log n)。
该算法要求列表必须是有序的,它通过将列表分成两半来查找元素,直到找到目标元素为止。
3. 冒泡排序算法冒泡排序算法是一种简单的排序算法,它的时间复杂度为O(n^2)。
该算法通过比较相邻的元素并交换它们的位置来排序列表。
4. 快速排序算法快速排序算法是一种更高效的排序算法,它的时间复杂度为O(nlog n)。
该算法通过选择一个基准元素并将列表分成两部分来排序列表。
5. 插入排序算法插入排序算法是一种简单的排序算法,它的时间复杂度为O(n^2)。
该算法通过将每个元素插入到已排序的列表中来排序列表。
6. 选择排序算法选择排序算法是一种简单的排序算法,它的时间复杂度为O(n^2)。
该算法通过选择最小的元素并将其放在列表的开头来排序列表。
7. 堆排序算法堆排序算法是一种更高效的排序算法,它的时间复杂度为O(n log n)。
该算法通过将列表转换为堆并进行排序来排序列表。
8. 归并排序算法归并排序算法是一种更高效的排序算法,它的时间复杂度为O(n log n)。
该算法通过将列表分成两部分并将它们合并来排序列表。
9. 哈希表算法哈希表算法是一种高效的数据结构,它的时间复杂度为O(1)。
该算法通过将键映射到哈希表中的位置来存储和访问值。
10. 树算法树算法是一种重要的数据结构,它的时间复杂度取决于树的深度。
树算法包括二叉树、AVL树、红黑树等。
以上是数据结构中最基础的十大算法,它们在计算机科学中有着广泛的应用。
(完整版)《搜索算法》知识点总结

(完整版)《搜索算法》知识点总结1. 搜索算法的概念搜索算法是计算机科学中的一类算法,用于在一个数据集合中查找指定的数据项。
搜索算法的目标是通过最少的计算操作来找到目标数据项,以提高效率。
2. 常见的搜索算法2.1 线性搜索线性搜索是最简单的搜索算法之一,它从数据集合的第一个元素开始逐个比较,直到找到目标数据项或者遍历整个数据集合。
线性搜索的时间复杂度为O(n),其中n为数据集合的大小。
2.2 二分搜索二分搜索是一种高效的搜索算法,它适用于有序的数据集合。
它将数据集合分为两部分,并与目标数据项进行比较,然后根据比较结果确定继续搜索的方向。
通过每次排除一半的数据,二分搜索的时间复杂度为O(log n),其中n为数据集合的大小。
2.3 哈希搜索哈希搜索通过将数据项映射到哈希表中的特定索引位置来进行搜索。
通过哈希函数,可以快速找到目标数据项所在的位置。
哈希搜索的时间复杂度为O(1),但需要额外的存储空间来存储哈希表。
2.4 深度优先搜索深度优先搜索是一种递归的搜索算法,它从起始点开始一直沿着一个路径搜索,直到找到目标数据项或者无法继续搜索。
如果搜索失败,则回溯到上一个节点,并探索其他路径。
深度优先搜索在有向图和无向图中均适用。
2.5 广度优先搜索广度优先搜索是一种逐层扩展的搜索算法,它从起始点开始,先访问所有直接相邻的节点,然后再访问相邻节点的邻居节点。
通过队列数据结构,广度优先搜索可以按层次进行遍历,直到找到目标数据项。
广度优先搜索适用于无权图和加权图。
3. 搜索算法的应用场景搜索算法在各种领域和实际问题中广泛应用,包括但不限于以下几个方面:- 文本搜索:在大规模的文本数据集中查找关键字或短语。
- 图像搜索:根据图像特征找到相似的图像。
- 数据库查询:根据指定条件查询数据库中的记录。
- 路径规划:在地图上找到最短路径或最优路径。
- 推荐系统:根据用户的兴趣和偏好推荐相关的内容。
- 人工智能:在机器研究和深度研究中的搜索空间优化等。
各种搜索引擎算法的分析和比较

各种搜索引擎算法的分析和比较在互联网上搜索所需信息或资讯,搜索引擎成为了人们必不可少的工具。
然而,搜索引擎的搜索结果是否准确、全面,搜索速度是否快速等方面,关键在于搜索引擎的算法,因此,搜索引擎算法成为了搜索引擎核心竞争力的来源。
目前,主流的搜索引擎包括Google、Baidu、Yahoo、Bing等,但它们的搜索结果和排序结果却存在着很大的差异。
这些搜索引擎的搜索结果背后都有不同的算法,下面将对目前主流的几种搜索引擎的算法进行分析和比较。
1. Google算法Google算法是目前全球最流行的搜索引擎算法,其搜索结果广受用户信任。
Google算法最重要的要素是页面权重(PageRank),其名字最初来源于Google的创始人之一拉里·佩奇的名字。
页面权重是根据页面链接的数量和链接网站的权重计算得到的一个评分系统,也就是所谓的“链接分”。
除此之外,Google还有很多其他的评分规则,比如页面初始状态、页面内部链接等。
可以说,Google的算法非常复杂,它使用了很多技术来确保其搜索引擎结果的质量。
2. Baidu算法Baidu是中国主流的搜索引擎,其搜索算法相较于Google来说较为简单。
Baidu的搜索结果主要依靠页面的标题、关键词、描述等元素,因此其搜索结果的可靠性稍逊于Google。
不过,Baidu的形态分析算法却是非常出色的,可以识别图片和视频等多种形态的信息。
除此之外,Baidu还使用了一些人工智能技术,例如深度学习算法来优化搜索结果。
3. Bing算法Bing是由微软开发的搜索引擎,其搜索结果以关键词匹配为核心来实现。
在关键词匹配的基础上,Bing还使用了一些机器学习和推荐算法来优化搜索结果。
另外,Bing还使用类似Google的页面权重评分系统来实现页面的排序。
除此之外,Bing还注重在搜索结果页面中显示质量较高的结果,而不局限于排序前十的结果。
4. Yahoo算法Yahoo算法是基于文本内容分析的搜索引擎算法。
C语言中的搜索算法详解

C语言中的搜索算法详解搜索算法在计算机科学中起着重要的作用,它们可以帮助我们在大量数据中迅速找到目标元素。
在C语言中,有多种搜索算法可供选择。
本文将深入探讨一些常用的搜索算法,包括线性搜索、二分搜索和哈希表搜索。
一、线性搜索线性搜索是最简单的搜索算法之一,也被称为顺序搜索。
它逐个比较列表中的元素,直到找到目标元素或搜索完整个列表。
这种算法适用于无序列表,并且其时间复杂度为O(n),其中n为列表的长度。
在C语言中,我们可以使用for循环来实现线性搜索算法。
下面是一个示例代码:```c#include <stdio.h>int linear_search(int arr[], int n, int target) {for(int i = 0; i < n; i++) {if(arr[i] == target) {return i;}}return -1;}int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int target = 3;int result = linear_search(arr, n, target);if(result != -1) {printf("目标元素在列表中的索引为:%d\n", result);} else {printf("目标元素不在列表中。
\n");}return 0;}```二、二分搜索二分搜索是一种更有效的搜索算法,前提是列表已经按照升序或降序排列。
它通过将目标元素与列表的中间元素进行比较,并根据比较结果将搜索范围缩小一半。
这种算法的时间复杂度为O(logn),其中n 为列表的长度。
在C语言中,我们可以使用递归或迭代的方式实现二分搜索算法。
下面是一个使用迭代方式实现的示例代码:```c#include <stdio.h>int binary_search(int arr[], int low, int high, int target) {while(low <= high) {int mid = (low + high) / 2;if(arr[mid] == target) {return mid;} else if(arr[mid] < target) {low = mid + 1;} else {high = mid - 1;}}return -1;}int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(arr[0]);int target = 3;int result = binary_search(arr, 0, n - 1, target);if(result != -1) {printf("目标元素在列表中的索引为:%d\n", result);} else {printf("目标元素不在列表中。
常用的算法

常用的算法
算法是指解决特定问题的步骤和操作的一种方式,是计算机科学中的一个重要分支,它可以帮助计算机处理各种问题,并给出更好的解决方案。
在解决复杂问题时,算法是必不可少的。
常用的算法主要包括搜索算法、排序算法、图算法、动态规划算法、数学算法、随机算法等。
下面将详细介绍这些常用的算法。
1.搜索算法搜索算法是一种应用广泛的算法,它的目的是在一组元素中查找满足特定条件的元素,如深度优先搜索(DFS)、广度优先搜索(BFS)、A*搜索等,都属于搜索算法。
2.排序算法排序算法是一种常用的算法,它可以对一组元素进行排序,使它们按照某种顺序排列。
一般常用的排序算法包括冒泡排序、选择排序、插入排序、归并排序、快速排序等。
3.图算法图算法是用来处理图的算法,它的目的是找出图中的最短路径或最小生成树。
常见的有Dijkstra算法、Kruskal算法、Prim算法、Floyd-Warshall算法等。
4.动态规划算法动态规划算法是一种用于求解最优化问题的算法,它可以解决多阶段决策问题。
典型的动态规划算法有贪心算法、背包问题算法等。
5.数学算法数学算法是处理数学问题的一种算法,它可以帮助用户快速解决数学问题,例如求和、求积、求最大公约数、求最小公倍数等。
6.随机算法随机算法是一种基于随机性的算法,它可以利用随机性来解决复杂的问题。
典型的随机算法有随机搜索算法、随机化算法等。
以上就是常用的算法,它们在各种计算机科学和工程中发挥着重要作用。
每种算法都有自己的特点和优势,因此,在解决复杂问题时,必须根据情况选择合适的算法,以获得更好的解决方案。
常见搜索算法

下面是一些比较重要的算法,原文罗列了32个,但我觉得有很多是数论里的或是比较生僻的,和计算机的不相干,所以没有选取。
下面的这些,有的我们经常在用,有的基本不用。
有的很常见,有的很偏。
不过了解一下也是好事。
也欢迎你留下你觉得有意义的算法。
(注:本篇文章并非翻译,其中的算法描述大部份摘自Wikipedia,因为维基百科描述的很专业了)1A*搜寻算法俗称A星算法。
这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。
常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。
该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。
2Beam Search束搜索(beam search) 方法是解决优化问题的一种启发式方法,它是在分枝定界方法基础上发展起来的,它使用启发式方法估计k 个最好的路径,仅从这k 个路径出发向下搜索,即每一层只有满意的结点会被保留,其它的结点则被永久抛弃,从而比分枝定界法能大大节省运行时间。
束搜索于20 世纪70 年代中期首先被应用于人工智能领域,1976 年Lowerre 在其称为HARPY的语音识别系统中第一次使用了束搜索方法,他的目标是并行地搜索几个潜在的最优决策路径以减少回溯,并快速地获得一个解。
3二分取中查找算法一种在有序数组中查找某一特定元素的搜索算法。
搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。
这种搜索算法每一次比较都使搜索范围缩小一半。
4Branch and bound分支定界(branch and bound) 算法是一种在问题的解空间树上搜索问题的解的方法。
但与回溯算法不同,分支定界算法采用广度优先或最小耗费优先的方法搜索解空间树,并且,在分支定界算法中,每一个活结点只有一次机会成为扩展结点。
算法_五大经典搜索算法

算法_五⼤经典搜索算法顺序查找最简单的从头开始对⽐查找。
折半查找要求:有序数组思想:将n个元素分成⼤致相同的两半,取中值和值x⽐较,如果相等则找到,如果值x⼩于中值,则只在数组的左半部分继续搜索值x;如果值x⼤于中值,则只在数组右半部分继续搜索值x复杂度:最坏情况下需要O(logN)时间代码如下:int binarySearch(int arr[], int x, int len){int left = 0, right = len-1;while(left <= right){int mid = (left + right) / 2;if(x == arr[mid]){return mid;}if(x > arr[mid]){left = mid + 1;}else{right = mid -1;}}return -1;}哈希查找时间复杂度为O(1)索引查找⼆叉树⼆叉树的前序遍历、中序遍历、后序遍历测试代码如下:package com.tree;public class Tree{public static void preOrder(TreeNode node){if(node == null){return ;}System.out.print(node.getData());preOrder(node.getLeft());preOrder(node.getRight());}public static void midOrder(TreeNode node){if(node == null){return ;}preOrder(node.getLeft());System.out.print(node.getData());preOrder(node.getRight());}public static void postOrder(TreeNode node){if(node == null){return ;}preOrder(node.getLeft());preOrder(node.getRight());System.out.print(node.getData());}public static void main(String[] args){TreeNode root = new TreeNode("A");TreeNode nodeB = new TreeNode("B");TreeNode nodeC = new TreeNode("C");TreeNode nodeD = new TreeNode("D");TreeNode nodeE = new TreeNode("E");TreeNode nodeF = new TreeNode("F");root.setLeft(nodeB);root.setRight(nodeC);nodeB.setLeft(nodeD);nodeB.setRight(nodeE);nodeC.setLeft(nodeF);System.out.print("先序遍历");preOrder(root);System.out.print("中序遍历");midOrder(root);System.out.print("后序遍历");postOrder(root);}}程序运⾏及结果如下(修改了控制台字体使得中⽂乱码):。
专利检索中的搜索算法和技巧

专利检索中的搜索算法和技巧专利检索是一项重要的研究工作,它帮助人们了解已有的技术,避免重复发明,并为创新提供灵感。
然而,由于专利文献庞大且复杂,如何高效地进行专利检索成为一个挑战。
本文将介绍一些常用的搜索算法和技巧,帮助读者更好地进行专利检索。
一、关键词搜索算法关键词搜索是最常用的专利检索方法之一。
在进行关键词搜索时,需要选择合适的关键词,并运用适当的算法来提高检索效果。
以下是几种常见的关键词搜索算法:1. 布尔搜索算法:布尔搜索算法通过逻辑运算符(如AND、OR、NOT)来组合关键词,从而实现更精确的检索。
例如,若要同时搜索两个关键词A和B,可以使用“A AND B”的搜索语句。
2. 模糊搜索算法:模糊搜索算法可以在关键词中加入通配符或模糊符号,以扩大检索范围。
例如,使用通配符“*”可以匹配任意字符,使用模糊符号“~”可以匹配近义词或拼写错误的词。
3. 权重搜索算法:权重搜索算法通过为关键词赋予不同的权重值,从而调整关键词在搜索结果中的排序。
通常,与专利标题和摘要相关的关键词会被赋予较高的权重值,以提高相关性。
二、分类码搜索技巧除了关键词搜索,分类码搜索也是一种常用的专利检索方法。
分类码是根据专利技术的特点和领域进行分类的一种系统,它可以帮助人们更快速地定位到相关的专利文献。
以下是一些分类码搜索的技巧:1. 精确分类码搜索:精确分类码搜索是指直接输入完整的分类码进行检索。
这种方法适用于已经熟悉分类系统的人员,可以快速准确地找到相关专利。
2. 层级分类码搜索:层级分类码搜索是指根据分类码的层次结构进行检索。
通常,分类码由一系列数字和字母组成,每个字符代表一个层级。
通过逐层缩小分类码的范围,可以更精确地定位到相关专利。
3. 相似分类码搜索:相似分类码搜索是指根据已知分类码找到与之相似的其他分类码进行检索。
这种方法适用于需要扩大检索范围的情况,可以发现与已有技术相关的其他领域。
三、引用文献搜索策略引用文献搜索是一种通过查找已有专利文献的引用部分来寻找相关专利的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Y Try(u,v,i+1,q1) Q1:=true Not (q1) N Y Board[u,v]:=0
交流QQ:404488879 交流
Q1 OR (K=8) Q:=Q1
试编程将1至N(N≤10)的自然数序列1,2,…, N重新排列,使任意相邻两数之和为素数.例如N =3时有两种排列方案123,321满足要求. 输入要求:N从键盘输入. 输出要求:每行输出一种排列方案(相邻数字之间 用空格分隔). 最后一行输出排列方案总数. 例如输入 3 输出 1 2 3 3 2 1 2 交流QQ:404488879 交流
交流QQ:404488879 交流
Made(t+1)
Pass2(t)
填数字 有如图所示的九个小方 格,在每个方格中填入0-9 中的一个数字,每个数字只 能用一次,并使每行的数字 组成的自然数都是完全平方 数,如图的填法就是一种合 法的情况.试编程找出所有 正确的填法. 输出要求:每行输出四 个自然数(分别为一位数, 二位数,三位数,四位数), 表示一种填法,两数之间用 空格分隔.例如上图情况输 出:1 36 784 9025.
ABCDEC
ABCDEC
ACDECB
ACEDCB
ABCDECA ABCDECA
ACDECBA
ACEDCBA
交流QQ:404488879 交流
深度优先与广度优先
深度优先的特点是在每 广度优先的特点是在 一个多岔路口, 一个多岔路口,如果能找 每一个多岔路口,都 到一条路往下走,就走, 到一条路往下走,就走, 要把所有的路都尝试 而不管别的路是否也能 一下,直到到达终点. 走下去,直到到达终点 所以利用广度优先搜 或无路可走时回溯.所 索,只要有路,也总 以利用深度优先搜索, 能找到,而且一旦找 只要有路,总能找到, 到,一定是最优解 (也即最少步骤). 但找到的那条并不一定 是最优的. 交流QQ:404488879 交流
交流QQ:404488879 交流
一. 递归算法: 递归过程为: procedure TRY(i); For r:=1 to maxr do (maxr是产生式规则数) begin If 子结点MR 符合条件 THEN begin 产生的子结点MR压入栈; IF 子结点 MR是目标结点 THEN 输出 是目标结点 ELSE TRY(I+1); ( ) 栈顶元素出栈(删去MR); end; end; {**********main**********} program DFS; 交流QQ:404488879 交流 初始栈; TRY(1);
二. 非递归算法 program DFS(dep); dep:=0; repeat dep:=dep+1;j:=0;p:=false; repeat j:=j+1; if 子结点mr符合条件 then 产生子结点mr并将其记录 if 子结点是目标 then 输出并出栈(更新j) else p:=true; else if j>maxj then 回溯 else p:=false; until p=true; 交流QQ:404488879 交流 until dep=0;
用数组B[0..9]来存储N个数字 存储规则: B[0]存储N个数字中0的个数 B[1]存储N个数字中1的个数 B[2]存储N个数字中2的个数 ………… ………… B[8]存储N个数字中8的个数 B[9]存储N个数字中9的个数
交流QQ:404488879 交流
其中回溯过程如下: procedure backtracking; dep:=dep-1; if dep>0 then 取回栈顶元素 else p:=true;
交流QQ:404488879 交流
Dep:=0 Dep:=dep+1 j:=0;p:=false; j:=j+1;
交流QQ:404488879 交流
3 4
X,Y
2 1 8
5 6 7
交流QQ:404488879 交流
数组A
-1 2
-2 1
-2 -1
-1 -2
1 -2
2 -1
2 1
1 2
设置8个方向变化 初始化board Board[1,1] try(1,1,2,q) q 1
Y
N
输出结果
输出无解信息
交流QQ:404488879 交流
K Try(x,y,i,q)
表示对(x,y)位置 作为第i步向前试探 的过程.若试探成 功,逻辑变量q的值 为true,否则为false
0 k←k+1 q1←false u←x+a[1,k] v←y+a[2,k] 合格 Y N Board=0 N Y Board[u,v] ←i i<n*n N
交流QQ:404488879 交
3
4 P 5
5
6 P 4
7
8
Y
2
P 6 马 P 7 P 8
P 3 P 2 P B(4, 交流QQ:404488879 交流 1 8)
3 4
X
现有n个数字(n<=200),要求把这n 现有n个数字(n<=200),要求把这n个数字划 分成K 分成K(K能整除N,设M=N/K)个集合S1, 能整除N,设M N/K)个集合S S2, S3 … Sk,,每个集合均有M个数字,集合 ,每个集合均有M Si中的数字按某种次序串接,构成一个正整 数Li(i=1,2,3, … ,k),问怎样划分和排列集合 ,k),问怎样划分和排列集合 S1, S2, S3 … Sk,,使得L1:L2 :L3 : … : k,,使得L Lk=,1:2:3: …:k.
交流QQ:404488879 交流
A
B
C
D
E
交流QQ:404488879 交流
A
B C
A
D
E
AB ABC ABCD ABCDE ABCE ACD
AC ACE ACED ACEDC
ACDE ACDEC
ABCDE
Try(I)
For r:=1 to maxr do
子结点mr 子结点mr 符合条件 Y
N
产生的子结点mr入栈 产生的子结点mr入栈
子结点mr是目标结点
Y
N
输出
Try(I+1) 交流QQ:404488879 交流
栈顶元素出栈(删去mr) 栈顶元素出栈(删去mr)
搜索算法
交流QQ:404488879 交流
搜索算法: 搜索算法 利用计算机的高性能来有目的 的穷举一个问题的部分或所有的可 能情况, 能情况,从而求出问题的解 的一种 方法. 方法. 搜索过程实际上是根据初始条 件和扩展规则构造一棵解答树并寻 找符合目标状态的节点的过程. 找符合目标状态的节点的过程.
数据初始化
have Made(1)
true
Y
have
N
输出无解信息
交流QQ:404488879 交流
Made(t) 填写第t个数 前提: 前t-1个数是合法 的 t<n
i
1 to n b[t]:=i Pass1(I,t) and YN(a[t-1]+b[t]) Y a[t]:=i t<n Y N N
交流QQ:404488879 交流
深度优先搜索算法
交流QQ:404488879 交流
深度优先搜索算法
交流QQ:404488879 交流
深度优先搜索法有两大基本特点: 1. 对已产生的结点按深度排序,深度大的先得到扩展, 即先产生它的子结点; 2. 深度大的结点是后产生的,但先得到扩展,即"后 产生先扩展".因此用堆栈作为该算法的主要数据结构, 存储产生的结点,先把产生的数入栈,产生站顶(即深 度最大的元素)子结点,子结点产生以后,出栈,再产 生栈顶子结点.
Y Mr符合条件 Y J>=maxj N N
产生子节点MR并记录 产生子节点MR并记录
Y 子节点是目标 N
回溯
输出并出栈
P:=tr ue
P:=fal se
Until p=false Until dep=0 交流QQ:404488879 交流
如图:A点有一个过河卒,需要走到目标B点.卒行走 的规则:可以向下,或者向右.同时在棋盘上的任一 点有一个对方的马(如图的C点),该马所在的点和 所有串跳跃一步可达的点称为对方马的控制点.例如 图中C点上的马可以控制9个点(图中的P1,P2,…, P8和C).卒不能通过对方马的控制点. 棋盘用坐标表示,A点(0,0),B点(n,m)(n,m 为不超过20的整数,并由键盘输入),同样马的位置 坐标是需要给出的(约定:C<>A,同时C<>B).现在 要求你计算出卒从A点能够到达B点的路径的条数.
bb[h]:=bb[h]-1 If g>0 then exit
交流QQ:404488879 交流
输出结果到OUTPUT Have:=false
骑士游历问题:在6*6的国际象棋上的 骑士游历问题:在6*6的国际象棋上的 某一位置上放置一" 某一位置上放置一"马",然后采用象 棋中"马走日字"的规则,要求该" 棋中"马走日字"的规则,要求该"马" 能不重复地走完36个格子,试编写程序 能不重复地走完36个格子,试编写程序 解决这个问题.
B[I] n个数据 Input.txt K值 have Made(1) have true
Y
N
输出无解信息
交流QQ:404488879 交流
Made(s) 取第1组的第S个数
i
0 to 9 B[i]>0 Y N i
前提: 前S-1个数是合法 的 S<M