Matlab 排列组合

问题如下,从{1,2,3}中取出任意数进行排列,顺序不同算不同,要求产生的排列长度最多为5,问有多少种排列,分别是什么?求大神解答~~例如{1}{2}{3}。。。。{11... 问题如下,从{1,2,3}中取出任意数进行排列,顺序不同算不同,要求产生的排列长度最多为5,问有多少种排列,分别是什么?求大神解答~~
例如 {1}
{2}
{3}。。。。
{11233}{11322}
。。。
{33333}
展开
tianxiawulang
2014-12-03 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2680万
展开全部

楼上的答案是正确的,但存在一些小问题:

1、循环到55555是没道理的,应该到33333,因为最大值只可能是33333。

2、程序效率太低,在我的电脑上运行需要几十秒。可以进一步优化,把效率提高几倍是可能的。

 

========

我的做法: 

========

我这里提供一种更简单的方法,一共只需要3行代码,而且效率极高,只需要大约0.02秒:

[a,b,c,d,e]=ndgrid(0:3);
x=a(:)+b(:)*10+c(:)*10^2+d(:)*10^3+e(:)*10^4;
x(any(int2str(x)=='0',2))=[];

 

==============

程序的基本思想:

==============

考虑5位数,各位数字只可能是0~3,而且0只能出现在前面(把不足五位的看作前面的数字是0)。所以,用ndgrid生成五位数的各位,并加到一起得到五位数,然后考虑到数字中不能出现0,将其转换为字符串之后再删掉含有0的数字即可(用到anyint2str函数)。

 

==========

得到的结果: 

==========

>> x

x =

           1
           2
           3
          11
          12
          13
          21
          22
          23
          31
          32
          33
         111
         112
         113

(限于篇幅,中间删除部分行)
       33311
       33312
       33313
       33321
       33322
       33323
       33331
       33332
       33333

>> whos x
  Name      Size                   Bytes  Class

  x       363x1                     2904  double array

Sievers分析仪
2025-01-06 广告
是的。传统上,对于符合要求的内毒素检测,最终用户必须从标准内毒素库存瓶中构建至少一式两份三点标准曲线;必须有重复的阴性控制;每个样品和PPC必须一式两份。有了Sievers Eclipse内毒素检测仪,这些步骤可以通过使用预嵌入的内毒素标准... 点击进入详情页
本回答由Sievers分析仪提供
shizairenweie
2014-12-02 · TA获得超过101个赞
知道小有建树答主
回答量:241
采纳率:0%
帮助的人:164万
展开全部
3+3*3+3*3*3+3*3*3*3+3*3*3*3*3=3+9+27+81+243=363
更多追问追答
追问
还要求所有排列~~
追答
1 2 3
11 12 13 21 22 23 31 32 33
这么写下去就可以了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式