若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。


  • 运维

  • 前端

  • 编程

  • 随笔

  • hust-oj

1711: 有重复元素的排列问题

发表于 2017-10-06   |   分类于 HUSTOJ   |   阅读次数 1,032

题目描述

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

输入

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

输出

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

样例输入

4
aacc

样例输出

aacc
acac
acca
caac
caca
ccaa
6

参考代码

#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
int num = 0;
int contains(char list[], int k, int i) 
{
    for (int j = k; j < i; j++) 
    {
        if (list[i] == list[j])
                                return 1;
    }
    return 0;
}
void Swap(char *a, char *b) 
{
    char temp = *a;
    *a = *b;
    *b = temp;
}
void Perm(char list[], int k, int m) 
{
    if (k == m) 
    {
        for (int i = 0; i <= m; i++)
                            printf("%c",list[i]);
        num++;
        printf("n");
   }
       else   
      {
                for (int i = k; i <= m; i++)
            {
                       if (!contains(list, k, i))
                      {
                               Swap(&list[k], &list[i]);
                         Perm(list, k+1, m);
                             Swap(&list[k], &list[i]);
                 }
               }
       }
}
int main()
{
        int n;
  char *list;
     scanf("%d",&n);
 list = (char *)malloc(sizeof(char)*n);
  scanf("%s", list);
      Perm(list, 0, n-1);
     printf("%dn",num);
     return 0;
}

解析

暂无

hustoj

发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注

*
*


hoxis wechat
著作权归作者所有
站点更新说明
  • 文章目录
  • 站点概览
若是凉夜已成梦

若是凉夜已成梦

青春里 总有些事情要努力去做 总有些梦想要拼命去追。

1904 日志
6 分类
12 标签
RSS
weibo github twitter facebook

友情链接

Skip 原站点 Dreams孤独患者
© 2017 若是凉夜已成梦
Powered by WordPress | 已运行
Theme By NexT.Mist