有重复元素的排练问题

    xiaoxiao2021-03-25  75

    还是向别人学习的 一道题目,是算法课后作业,时间关系,只能向别人请教了。

    Description

    设R={ r1, r2, ……, rn }是要进行排列的n个元素。其中元素r1 ,r2 ,……,rn可能相同。试设计一个算法,列出R的所有不同排列。 给定n以及待排列的n个元素。计算出这n个元素的所有不同排列。

    Input

    输入数据的的第1行是元素个数n,1≤n≤500。接下来的1行是待排列的n个元素。

    Output

    将计算出的n个元素的所有不同排列输出,每种排列占1行,最后1行中的数是排列总数。

    Sample Input

    4 aacc

    Sample Output

    aacc  acac  acca  caac  caca  ccaa  6

    #include <iostream>   #include <algorithm>   #include <cstdio>   using namespace std ;   long long ans;   int ok(char str[],int a ,int b )   {                if(b>a)                  for(int i=a;i<b;i++)                      if(str[i]==str[b])                            return 0;                  return 1;   }   void perm(char str[],int k,int m)   {                  int i;                  if(k==m)                  {                      ans++;                      for(i=0;i<=m;i++)                            printf("%c",str[i]);                      printf("\n");                      return ;                  }                  else for(i=k;i<=m;i++)                              if(ok(str,k,i))                              {                                          swap(str[k],str[i]);                                          perm(str,k+1,m);                                          swap(str[k],str[i]);                              }        }   int main()   {          char str[505];          int n,i;          scanf("%d",&n);          getchar();          ans=0;          for(i=0;i<n;i++)                scanf("%c",&str[i]);          perm(str,0,n-1) ;          printf("%lld\n",ans);          return 0;   }

    转载请注明原文地址: https://ju.6miu.com/read-34467.html

    最新回复(0)