面试题12

来源:互联网 发布:股票价值分析软件 编辑:程序博客网 时间:2024/06/08 12:40

给出一个数据A={a_0, a_1, a-2, … a_n}(其中n可变),打印出该数值元素的全排列。
例如:A={1,2,3},则所有排列为{123,132,213,231,312,321}。

#include<stdio.h>#include<stdlib.h>void swap(char *s, int a, int b) {    char t = s[a];    s[a] = s[b];    s[b] = t;}int is_swap(char *s, int begin,int a) {    for (int i = begin; i < a; i++) {        if (s[i] == s[a])             return 0;    }    return 1;}void pailie(char *s, int begin, int end) {    if (begin == end) {        printf("%s\n", s);    }    else {        for (int i = begin; i <= end; i++) {  /*若两个字符相同,可以去除重复的排列*/            if (is_swap(s, begin,i) == 1) {                swap(s, begin, i);                pailie(s, begin + 1, end);                swap(s, begin, i);            }        }    }}int main() {    char str[] = "ABBC";    int n = strlen(str);    pailie(str, 0, n-1);    return 0;}
0 0