关于字母排序

来源:百度知道 编辑:UC知道 时间:2024/06/30 19:36:58
谁能帮我吧gmugion这几个字母给我排列了,共5040个组合,我知道C语言可以

思路:建立一个char数组类型a,存储这几个字母。再重新建立一个同样大小的char数组类型c。
然后用循环,
1、取a的第i(i由循环控制变化,用for语句)个元素把它赋给c的第j(同样用for来控制)个元素,这样c中就存储了a的前i个元素。然后把a拷贝给它的下一级循环,在下一级循环里把上一级所取过的那个数的位置置0,然后用一个条件语句判断,下一级循环取的数为上一级没取过的(即不为0的);
2、当循环到数组中全为0的时候就结束这一轮循环,并输出c中的值,然后把c清空。进入下一轮循环,即i的值加1;
3、当i循环完了后就把整个数组输出完了。

数学思维是:(就是求全排列)在7个(这里是7个,其实可以是n个)位置中,先让第一个位置在7个数中的任意一个(即i从1到7),然后,第二个位置在剩下的6个数中又任意取一个,由下一级循环控制;第三个位置在剩下的5个数中又任意取一下,由再下一级循环控制,依次下去就取遍了所有。

说起来简单,可做起来就不是那么简单了,楼主,我调试了几个小时(这几天有些忙,不能花太多时间在这上面了,所以...),很遗憾,没有调试成功,但思路是对的。我把我的代码粘上,如果你觉得我这个方法可行,你可以自己调试一下,其他高手也可以帮忙调试一下。我觉得这个程序很好,如果调试出来了,希望你告诉我一下,好吗?

//我这是c++的,如果是c的话把只需改cout(输出)那一句为printf即可;
#include<iostream.h>
#include<string.h>

char d[]="gmugion";//定义全局变量d
char c[8]; //定义全局变量c,用于输出排序后的数组
int n=0;//全局变量用来控制c的元素
int flag=1;//标志,用来检查b是否为空
void cop(char a[])//函数,递归调用可完成遍历
{
flag=1;//重新给flag赋初值
for(int i=0;i<7;)
{
char b[size