N个字母的全排列

//N个字母的全排列
#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
char output[SIZE]={};//全排列以后的数组
char data[SIZE]={'A','B','C','D','E'};//原数据数组
int count;//用于显示全排列的组数

/* 函数名: issafe
*  函数功能:判断接下来要存入的数据是否出现过
*  入口参数:1.step  已经放过step个数,从0到step-1
             2.value 当前要放入的值 
*  返回值: bool变量,出现过返回0,没有出现过返回1
*/
bool issafe(int step,int value){
    bool ret = true;
    for(int i=0;i<step;i++){
        if(output[i]==value)
            ret = false;
    }
    return ret;
}


/* 函数名:all_sort
*  函数功能:把N个字母全排列
*  入口参数:step 当前排序的位置
*  返回值:空
*/
void all_sort(int step){
    if(step == SIZE){
    for(int i=0;i<SIZE;i++){
        printf("%c",output[i]);}
    printf("\n");
    count++;
    return;
    }

    for(int j=0;j<SIZE;j++){
       if(issafe(step,data[j])){
           output[step] = data[j];
           all_sort(step+1);
       }
     }
}
int main(){
    all_sort(0);
    printf("%d\n",count);
    system("pause");


}


可以使用:

freopen("output.txt","w",stdout);

//把输出结果重定向到文件

结果出现问题的思路:

1.在迭代过程的每一步处理的过程中的数组下标写错了。出现的错误:output[step] =data[i];

错写成output[i] = data[i];

2.在判断是否安全的函数中数组下标写错了。出现的错误:if(value == output[j])错写成if(value==data[j]) 比较的逻辑错误了。

仔细检查数组下标和迭代的思路进行比较。

posted @ 2016-11-22 16:46  Pumpkin0227  阅读(599)  评论(0编辑  收藏  举报