4个元素的集合{a,b,c,d}可能产生的排列。(递归算法)

#include<stdio.h>
#include<string.h>
void Perm(char m[], int k, int n)
{ char t;
int i;
if (k==n-1)
{ //输出一种排列
for (i=1; i<n; i++)
printf("%c", m[i]);
}
else //产生{m[k],…,m[n-1]}各种排列
for (i=k; i<n; i++)
{
t=m[k];m[k]=m[i];m[i]=t; //产生{m[k+1],…m[n-1]}各种排列
Perm(m, k+1, n);
t=m[k]; m[k]=m[i];m[i]=t;
}
printf("\n");
}
main()
{ int k=0;
char m[4]={'a','b','c','d'};
Perm(m, k,4);
}
我编的程序不知道哪里错了。
由于我还是刚刚注册的,没什么财富。所以请好心人士帮帮我吧,我要是有财富,绝不会吝啬的。

你的程序写的基本都对了,怎么不愿仔细看看呢
关于你的输出,错误只有2个,第一,第一个字母丢失了,第二,出现了很多空行。

关于第一个问题,看你的输出,for (i=1; i<n; i++) i从1开始,所以少了第一个字母,应该改成i=0
关于第二个问题,如果去掉那些空行,那么其余的都是对的,所以只是多了一些空行,因为你在else里面打了空行。if里面才是要打印内容的,那么应该紧接着if中的打印以后,打印空行,为什么在else里面打印空行呢?

#include<stdio.h>
#include<string.h>
void Perm(char m[], int k, int n) {
char t;
int i;
if (k == n - 1) { //输出一种排列
for (i = 0; i < n; i++)
printf("%c", m[i]);
printf("\n");
} else
//产生{m[k],…,m[n-1]}各种排列
for (i = k; i < n; i++) {
t = m[k];
m[k] = m[i];
m[i] = t; //产生{m[k+1],…m[n-1]}各种排列
Perm(m, k + 1, n);
t = m[k];
m[k] = m[i];
m[i] = t;
}

}
int main() {
int k = 0;
char m[4] = { 'a', 'b', 'c', 'd' };
Perm(m, k, 4);
return 0;
}
温馨提示:内容为网友见解,仅供参考
无其他回答

4个元素的集合{a,b,c,d}可能产生的排列。(递归算法)
char m[4] = { 'a', 'b', 'c', 'd' };Perm(m, k, 4);return 0;}

输入4个整数a,b,c,d,找出其中最大的数。用函数的递归调用来处理
printf("the max number is %d\\n",max(max(a,b),max(c,d)));} int max(int a,int b){ return a>b?a:b;}

元素组合法举例说明
1. 选择固定数量的元素进行组合:例如,从元素集合{A, B, C, D}中选择2个元素进行组合,可以有以下组合方式: - AB - AC - AD - BC - BD - CD2. 选择固定长度的组合:例如,从元素集合{A, B, C, D}中选择长度为3的组合,可以有以下组合方式: - ABC - ABD - ACD - BCD3. ...

汉诺塔c语言程序代码递归?
\\x0d\\x0a递归算法:\\x0d\\x0a#include\\x0d\\x0a\/\/递归求汉诺塔问题\\x0d\\x0avoidhanoi(intn,charA,charB,charC,int*time)\\x0d\\x0a{\\x0d\\x0aif(n=1)\\x0d\\x0a{\\x0d\\x0ahanoi(n-1,A,C,B,time);\\x0d\\x0amove(A,C);\\x0d\\x0a(*time)++;\\x0d\\x0ahanoi(n-1,B,A,C...

4的 错排数是 9,比如4个元素(ABCD),请枚举
ABCD四个元素错位重排的枚举如下:第一类:当A向后移动一位时,有DABC、BADC、CADB三种情况;第二类:当A向后移动两位时,有CDAB、DCAB、BDAC三种情况;第三类:当A向后移动三位时,有BCDA、CDBA、DCBA三种情况;所以一共是3+3+3=9种情况,每一类下面又是一个三位数的错位重排,三位数时...

c++得出有n个元素的集合的所有子集?
按照你的要求编写的打印有n个元素的集合的所有子集的C++程序如下(见图)

四元组之间的运算程序
FourElements e2 = new FourElements(11, 22, 33, 44d);FourElements e3 = e1.calculate(e2);System.out.println("After calcualting, the result is: " + e3.toString());} } class FourElements{ private double a, b, c, d;public FourElements(double a, double b, double c, ...

写一个递归算法 (数据结构)
数据结构如上图,程序就按照上图写(中序遍历),不难 上图少画了一层,还改不了,但意思很明确

递归算法
输入:盘子的个数n、柱子的名称a,b,c 输出:移动方案 输入:位数n 输出:斐波那契数列第n位的值 有n阶楼梯,每次只能下一个或者两个,计算一共有多少种下楼方法 算法思想:1.将n个数均分为s1和s2 2.分别求解s1和s2的最大值和最小值 s1最大值为max1,s1最小值为min1 s2最大值为max2,s2...

java 递归算法问题:(n,k)=(n-1,k-1)+(n-1,k)?
就是说 n 个里面要选 k 个,分为两组,包含 A和不包含A。包含 A : 已经包含A了,所以总数是 n-1 个了;同理,已经包含了A,所以只要选 k -1 个就可以了,所以为 (n-1,k-1)。不包含A:已经不包含A了,所以总数是 n-1 个;还是选 k个,所以为(n-1,k)。无限递归即可以了。

相似回答
大家正在搜