`

重复数全排列的递归实现

    博客分类:
  • C
阅读更多
#include <stdio.h>

char str[100] = {0};
char out[100] = {0};
int len = 0;

void get_size()
{
	while (str[len] != 0)
	{
		len++;
	}
}

void sort()
{
	int i, j;
	char tmp;
	for (i = 0; i < len - 1; i++)
		for (j = i + 1; j < len; j++)
		{
			if (str[i] > str[j])
			{
				tmp = str[i];
				str[i] = str[j];
				str[j] = tmp;
			}
		}
}

void pailie(int loc)
{
	int i;
	char tmp;
	for (i = 0; i < len; i++)
	{
		if (i > 0 && str[i] == str[i-1]) ;
		else if (str[i] != '#')
		{
				tmp = str[i];
				out[loc] = str[i];
				str[i] = '#';
				if (loc == len - 1)
				{ 
					out[len] = 0;
					puts(out);
				}
				else
				{
					pailie(loc + 1);
				}	
				str[i] = tmp;
		}
	}
}

void main()
{
	gets(str);	
	get_size();
	sort();
	pailie(0);
}
分享到:
评论

相关推荐

    去重全排列的递归实现

    去重全排列的递归实现 去掉重复数字的 全排列的 递归实现

    N个数全排列的非递归算法

    标题 "N个数全排列的非递归算法" 涉及的是计算机科学中的经典问题——全排列。全排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列的所有可能组合。在这个场景中,非递归算法指的是不依赖递归...

    递归练习 数据结构实验全排列

    下面是一个简单的全排列递归算法实现(用伪代码表示): ```python function permute(data, start, end): if start == end: // 基本情况:只有一个元素 print(data) else: for i in range(start, end + 1): // ...

    C#实现解决全排列重复问题

    本篇文章将深入探讨如何使用C#解决全排列重复问题,并提供一种有效的实现方法。 全排列的基本思想是回溯法,通过递归或迭代的方式尝试所有可能的组合。当遇到重复元素时,我们需要避免生成重复的排列。以下是一种...

    全排列-非递归算法

    在本例中,我们关注的是非递归算法来实现全排列,这通常使用回溯法或者迭代的方式来完成,特别是在有新元素动态加入时,需要能够快速适应并重新生成全排列。 非递归算法的优点在于它可以避免深度过大的调用栈,从而...

    C#算法之全排列递归算法实例讲解

    全排列递归算法的实现通常基于以下策略: 1. 基线条件:当只剩下一个元素时,输出当前排列。 2. 递归步骤:对每个位置,尝试将所有未使用的元素放置在该位置,然后递归地对剩余元素执行全排列。 在C++代码示例中,...

    php全排列递归算法代码

    通过以上两种实现方式,我们不仅可以理解全排列递归算法的基本原理,还可以了解到如何在实际应用中解决可能出现的问题。在处理包含重复元素的数据集时,第二种实现方式显得尤为重要。此外,这种算法不仅适用于PHP,...

    重复元素全排列

    在Java中实现重复元素全排列,通常采用递归的方法。核心思想是通过交换元素的位置来生成不同的排列组合,并检查每次交换是否产生了一个新的、未被记录的排列。为了避免重复计算,可以使用一个辅助函数`Judge()`来...

    python递归全排列实现方法

    本篇将重点介绍如何使用Python通过递归的方式来实现全排列。 首先,我们要理解递归的概念。递归是一种编程方法,它通过调用自身来解决问题或执行任务。在全排列问题中,我们可以将全排列视为一个由较小规模的子问题...

    全排列C++实现

    全排列递归通常基于回溯思想,即在当前选择的基础上尝试所有可能的选择,如果某个选择不满足条件,则退回一步,尝试其他选择。在C++中,递归函数可以这样设计: ```cpp void permute(vector&lt;int&gt;& nums, int start)...

    五个数的全排列

    对于5个数的全排列问题,我们可以设计一个递归函数,将当前已排列的部分和未排列的部分作为参数,每次尝试将未排列的数放到已排列序列的末尾,并递归处理剩余的数。 以下是C语言实现5个数全排列的基本步骤: 1. ...

    全排列算法的非递归实现与递归实现的方法(C++)

    全排列算法的非递归实现利用了序列的特性,通过调整找到下一个排列,而递归实现则利用了分治策略,将问题分解为更小的部分进行解决。两种方法各有优势,非递归实现空间效率较高,但可能涉及到较多的局部状态调整;...

    全排列(阶乘)输出程序

    在C++中,实现全排列通常会借助递归的思想。递归是一种函数或过程调用自身的技术,它可以用来解决复杂的问题,尤其适用于处理具有分治特性的任务,如全排列。全排列的递归算法通常基于以下两个步骤: 1. **基本情况...

    C++全排列中递归交换法实例详解

    全排列问题是一个经典的计算机科学问题,它涉及到排列组合和递归算法。在C++中,解决全排列问题的一种有效方法是使用递归交换法。这种方法虽然在思路上有类似暴力枚举,但通过巧妙地利用交换操作,可以在一定程度上...

    全排列算法实现(java\c#\c++,各种主流语言版本)

    这个C代码展示了全排列的递归实现。`perm`函数接受一个数组、当前处理的元素的索引k和数组长度m。当k大于m时,表示已经到达数组末尾,此时打印当前排列并增加计数器n。否则,遍历k到m的所有元素,与基准点交换位置,...

    全排序算法c++递归实现

    ### 全排序算法C++递归实现解析 #### 一、引言 全排序(也称为全排列)...全排列的递归实现虽然简单直观,但在实际应用中可能面临效率问题。通过采用迭代或并行处理等优化手段,可以在一定程度上提高算法的执行效率。

    易语言源码易语言数字文本的全排列.rar

    在易语言中,实现全排列通常会用到递归或回溯法。递归是一种函数调用自身的技术,而回溯法则是一种在搜索解空间树的过程中,通过不断试探前进并适时退回以寻找满足条件的解的方法。当找到一个解时,就返回该解;如果...

    全排列(多种算法实现)

    全排列是计算机科学中一种常见的算法问题,主要涉及组合数学和递归思想。在编程中,全排列通常指的是给定一个包含n个不同元素的序列,找出所有可能的n!种排列方式。这个问题广泛应用于数据处理、数据分析以及各种...

    回溯法 - 输出自然数1到n所有不重复的排列,即n的全排列

    根据给定文件的信息,本文将深入探讨如何使用回溯法来输出自然数1到n的...以上就是关于如何使用回溯法输出自然数1到n的所有不重复排列(即n的全排列)的详细介绍及Java实现。希望对读者理解回溯法及其应用有所帮助。

    全排列算法(分治法求解法和回溯法)

    在全排列问题中,分治法的基本思想是递归地处理数组中的元素。假设我们有一个长度为n的数组,我们可以选择数组的第一个元素作为排列的首位,然后对剩下的n-1个元素进行全排列。这样,我们得到了所有可能的首位,与...

Global site tag (gtag.js) - Google Analytics