一个和全排列相关的问题

执假以为真 2007-11-09 11:21:55
比如给你几个字母,如:a、b、c,再给你一个数字n,如:n=10,请写出关于这三个字母的全排列,如:
a a a a a a a a a a
a a a a a a a a a b
......
a b a b a c a b a b
.......
c c c c c c c c c c

请说出算法即可,谢谢! 是否用回溯法?
...全文
98 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2007-11-09
  • 打赏
  • 举报
回复
看做10位3进制,那么就是i从0到3^10-1=59048循环,每个i转化为3进制方式表示,字符0、1、2替换成a、b、c:
0→0000000000→aaaaaaaaaa
1→0000000001→aaaaaaaaab
...
59048→2222222222→cccccccccc

medie2005 2007-11-09
  • 打赏
  • 举报
回复
这个不叫“全排列”吧。

将a,b,c看成0,1,2,那么问题这就相当于:递增地列举出所有的三进制数。问题已经很简单了,楼主自己编吧。
执假以为真 2007-11-09
  • 打赏
  • 举报
回复
不对,最快速的我想出来了:
#include <iostream>
using namespace std;

int a[3]={4, 7, 8};
int b[5];

int count=0;

void fn(int a[], int asize, int *b, int bsize, int cur)
{
if(cur==bsize)
{
for(int i=0; i<bsize; i++)
cout<<b[i]<<" ";
cout<<endl;
count++;
return;
}
for(int i=0; i<asize; i++)
{
b[cur]=a[i];
fn(a, asize, b, bsize, cur+1);
}
}

void main()
{
fn(a, 3, b, 5, 0);
cout<<count<<endl;
}
执假以为真 2007-11-09
  • 打赏
  • 举报
回复
对啊!这么简单竟然没有想到!这些天不知道是怎么了!

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧