8594 有重复元素的排列问题
时间限制:800MS 内存限制:1000K 提交次数:524 通过次数:95
语言: not limited
描述
输入格式
第1行是元素个数n,1<=n<=15。接下来的1行是待排列的n个元素,元素中间不要加空格。
输出格式
程序运行结束时,将计算输出n个元素的所有不同排列。最后1行中的数是排列总数。
(说明:
此题,所有计算出的排列原本是无所谓顺序的。但为了容易评判,输出结果必须唯一!
现做约定:所有排列的输出顺序如课本P11的例2-4的程序段的输出顺序,区别仅是这道题是含重复元素。)
输入样例
4
4
aacc
输出样例
aacc
acac
acca
caac
caca
ccaa
6
5
---------------------------------------------------------
8594有重复元素的排列问题(递归、分治)
#include<stdio.h>
#include<malloc.h>
intcount=0;
voidSwap(char*a,char*b)
{
chartemp=*a;*a=*b;*b=temp;
}
intPerm(charlist[],intk,intm)
{
inti,j,flag;
if(k==m)
{
for(i=0;i<=m;i++)printf("%c",list[i]);
printf("\n");
count++;
}
else
for(i=k;i<=m;i++)
{
for(j=k,flag=1;j<i;j++)
{
if(list[j]==list[i]){flag=0;break;}
}
if(flag==1)
//if(list[k]!=list[i])
{ Swap(list+k,list+i);
Perm(list,k+1,m);
Swap(list+k,list+i);
}
}
returncount;
}
intmain()
{
intn,count_2;
char*list;
{
scanf("%d",&n);
}while(n<1||n>15);
list=(char*)malloc(n*sizeof(char));
scanf("%s",list);
count_2=Perm(list,0,n-1);
printf("%d",count_2);
return0;
}
分享到:
相关推荐
标题中的“8594 有重复元素的排列问题”是指一种编程挑战,目标是设计一个算法来生成具有重复元素的集合的所有不同排列。描述进一步解释了这个问题,指出需要处理的集合R包含n个可能相同的元素,并且要求列出所有...
题目 "8594有重复元素的排列问题" 是一道编程题,主要涉及计算机科学中的全排列算法,尤其是处理有重复元素的情况。全排列是指从n个不同元素中取出m个元素,按照一定的顺序排列起来,形成的所有可能的排列组合。在本...
### 华农8594有重复元素的排列问题 #### 背景与目标 在计算机科学领域,排列问题是组合数学中的一个经典问题。它涉及到如何从一组元素中选取部分或全部元素进行重新排序的问题。当这组元素中存在重复元素时,问题...
王晓东-计算机算法与分析...设R={r1,r2,……,rn}是要进行排列的n个元素。其中元素r1,r2,……,rn可能相同。使设计一个算法,列出R的所有不同排列。 给定n以及待排列的n个元素。计算出这n个元素的所有不同排列。
问题描述:设R={r1,r2,…,rn}是要进行排列的个元素。其中元素r1,r2,…,rn 可能相同。试设计一个算法,列出R的所有不同排列。 ★算法设计:给定n及待排列的n个元素。计算出这n个元素的所有不同排列。 ★数据输入:由...
实现2-5有重复元素的排列问题.cpp
### 有重复元素圆排列和环排列的计数问题 #### 概述 在组合数学领域,排列问题是一项基础而重要的研究课题。排列是指从给定的一些不同元素中选取若干个元素按照一定的顺序进行排列的方式。当这些元素中有重复的...
有重复元素的排列问题 Description 设R={ r , r , , rn 1 2 可能相同。试设计}是要进行排列的n个元素。其中元素n r , r , , r 1 2 一个算法,列出R的所有不同排列。 编程任务: 给定n 以及待排列的n 个元素...