Matlab 排列组合

发布网友 发布时间:2022-04-22 04:38

我来回答

2个回答

热心网友 时间:2023-10-11 20:20

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

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

热心网友 时间:2023-10-11 20:21

3+3*3+3*3*3+3*3*3*3+3*3*3*3*3=3+9+27+81+243=363

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com