含有重复元素的排列

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

分析:和普通求全排列问题差不多,只是多了,判断是否重复字符而已。

关于无重复元素的排列,可以参考:http://www.cnblogs.com/huashanqingzhu/p/3569835.html

复制代码
 1  #include <iostream>
 2  #include <algorithm>
 3  #include <cstdio>
 4  using namespace std ;
 5  long long ans;
 6  int ok(char str[],int a ,int b )
 7  {
 8           if(b>a)
 9            for(int i=a;i<b;i++)
10               if(str[i]==str[b])
11                   return 0;
12            return 1;
13  }
14  void perm(char str[],int k,int m)
15  {
16            int i;
17            if(k==m)
18            {
19               ans++;
20               for(i=0;i<=m;i++)
21                   printf("%c",str[i]);
22               printf("\n");
23               return ;
24            }
25            else for(i=k;i<=m;i++)
26                    if(ok(str,k,i))
27                    {
28                            swap(str[k],str[i]);
29                            perm(str,k+1,m);
30                            swap(str[k],str[i]);
31                    }
32    
33  }
34  int main()
35  {
36       char str[505];
37       int n,i;
38       scanf("%d",&n);
39       getchar();
40       ans=0;
41       for(i=0;i<n;i++)
42           scanf("%c",&str[i]);
43       perm(str,0,n-1) ;
44       printf("%lld\n",ans);
45       return 0;
46  }
复制代码

 

本文代码来自:http://blog.sina.com.cn/s/blog_9b95c19e0101aqwn.html

 

posted on   华山青竹  阅读(1202)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示