算法--有重复元素的排列问题

如果运行报错的话,就把for循环里面的int i挪到外面,因为我当时写的时候文件后缀名是cpp,用c做后缀的话就挪出来吧。

#include<stdio.h>
#include<stdlib.h>

int count;

void Swap(char &a,char &b){
	char temp;
	temp = a;
	a = b;
	b = temp;
}

bool isExist(char a[],int l,int r)
{
    for(int i=l;i<=r-1;i++)
    {
        if(a[i]==a[r])
           {
              return true;
           }
    }
    return false;
}

void Perm(char a[],int l,int r){
	if(l==r){
		for(int i=0;i<=r;i++){
			printf("%c",a[i]);
		}
		printf("\n");
		count++;
	}
	else{
		for(int i=l;i<=r;i++){
			if(isExist(a,l,i)){
				continue;
			}
			Swap(a[l],a[i]);
			Perm(a,l+1,r);
			Swap(a[l],a[i]);
		}
	}
} 


int main(){
	//先输入数组元素长度
	int n;
	scanf("%d\n",&n);
	char a[n];
	for(int i=0;i<n;i++){
		scanf("%c",&a[i]);
	}
	//向函数中传入参数(数组长度和数组)
	Perm(a,0,n-1);
	
	//输出
	printf("%d",count); 
	return 0; 
}
posted @ 2022-06-19 15:56  坤舆小菜鸡  阅读(23)  评论(0编辑  收藏  举报  来源