有重复元素的排列问题.DOC

上传人:天*** 文档编号:1322275 上传时间:2019-02-08 格式:DOC 页数:6 大小:77KB
下载 相关 举报
有重复元素的排列问题.DOC_第1页
第1页 / 共6页
有重复元素的排列问题.DOC_第2页
第2页 / 共6页
有重复元素的排列问题.DOC_第3页
第3页 / 共6页
有重复元素的排列问题.DOC_第4页
第4页 / 共6页
有重复元素的排列问题.DOC_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、1有重复元素的排列问题一 问题描述:设 R=r1,r2,r n是要进行排列的 n 个元素,其中 r1,r2rn 元素可能相同,请设计出一个算法,列出R 中元素的所有不同排列。 在给定的 n 以及待排列的 n 个元素,计算出这 n 个元素的所有不同排列。二 要求输入输出:输入:第一行是元素个数 n,1=n=15,接下来的 1 行是待排列的 n 个元素,元素中间不要加空格。输出:程序运行结束时,将计算出 n 个元素的所有不用排列,最后 1 行中的数是排列总数。例如:Input4aaccoutputaaccacacaccacaaccacaccaa6三 设计概要:1)数据类型定义:int j=0 定义

2、 j 初始为 0,用来计数总共排列数int n 输入排列元素的个数char list 定义数组 list 存放排列元素int k ;int m 数组中元素第 k 位到第 m 位的排列int flag 标识符2)程序流程图:void Perm(int k,int m)2YNN YN YNSwap(ai,ak)Perm(k+1,m);i+printf(“%s”,list);i=kk=mi+;不存在 k=ji 令 aj=aiSwap(ai,ak)return;i=m33)模块间的调用:main()Perm()四 详细算法设计:if (是否一个元素 )for(寻找到该排列元素)printf(输出该元素

3、);排列数加一else /还有多个元素待排列,递归产生排列for(从第 k 个直到第 m 个元素) flag=0;for(p=k;pi;p+)if(listp=listi)flag=1;if(flag=1) continue;Swap(listk,listi);Perm(list,k+1,m);Swap(listk,listi);void Swap(char void main() /main 函数,调用 swap 和 permint n;void Swap(char void Perm(char list,int k,int m);scanf(“%d“,char list16;scanf(“

4、%s“,list);Perm ( list, 0, n-1);printf(“%dn“,j);void Swap(char a=b;b=temp;6void Perm(char list,int k,int m) /产生 listk:m的所有排列 int i,p;int flag;void Swap(char if(k=m) /只剩下一个元素for( i = 0;i = m;i+)printf(“%c“,listi);j+;printf(“n“);else /还有多个元素待排列,递归产生排列for(i=k;i=m;i+) flag=0;for(p=k;pi;p+)if(listp=listi)flag=1;if(flag=1) continue;Swap(listk,listi);Perm(list,k+1,m);Swap(listk,listi);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。