问题如下,从{1,2,3}中取出任意数进行排列,顺序不同算不同,要求产生的排列长度最多为5,问有多少种排列,分别是什么?求大神解答~~
例如 {1}
{2}
{3}。。。。
{11233}{11322}
。。。
{33333}
楼上的答案是正确的,但存在一些小问题:
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的数字即可(用到any和int2str函数)。
==========
得到的结果:
==========
>> 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
还要求所有排列~~
追答1 2 3
11 12 13 21 22 23 31 32 33
这么写下去就可以了啊
额,求matlab代码,非手写
追答好的,试下
count=0;
data=[];
for i=1:55555
str=num2str(i);
if ismember(str(:),{'1' '2' '3'})
count=count+1;
data(count)=i;
else
end
end
为什么i要从0到55555呢?因为限制长度是5么?
追答对的
统计学原理与matlab——(2)阶乘、排列组合,二项分布
排列组合涉及不同物品的选取,排列公式为 n 个不同物品中有顺序地取 m 个,组合公式为 n 个不同物品中无顺序地取 m 个。在 MATLAB 中,可以使用阶乘函数进行计算。接下来,我们讨论二项分布。假设事件 A 发生的概率为 p,则不发生的概率为 1-p。重复进行 n 次实验,其中发生 x 次的概率满足...
matlab 中什么语句可以得到排列组合的所有情况
查阅nchoosek函数
MATLAB中排列组合问题,新手救急!!!谢谢!!!
Matlab:排列组合问题 3 nchoosek(x,m):在程序中输入一个向量x与需要的元素个数m,nchoosek(x,m)给出了从包含n个元素的向量x中选取m个元素的组合。
matlab 中什么语句可以得到排列组合的所有情况
perms函数,如以下代码:a=[1 2 3];b=perms(a);---运行结果为:b = 3 2 1 3 1 2 2 3 1 2 1 3 1 2 3 1 3 2
如何利用matlab把多组向量排列组合。
生成全排列可以用perms函数,把各向量放在元胞数组中,然后按照全排列来组合即可:M = {[1 2 3]; [4 5 6]; [7 8 9]};I=perms(1:3);C=mat2cell(I,ones(6,1),3);R=cellfun(@(ii)[M{ii}],C,'UniformOutput',false)这样得到的结果R是一个元胞数组,其每个元素分别是一个组合...
一个matlab里的排列组合或者说是循环嵌套的层数不定的问题,如何解决...
1、使用ndgrid生成N维网格数据;2、把网格数据转换为坐标组合。参考代码 把每维的坐标写成向量,然后放在一个cell数组中% 这里按照你给的例子示范(三个坐标)C = { 3:4 3:4 3:4 };% 使用ndgrid生成N维网格数据n = length(C);S=arrayfun(@(i)sprintf('x%i ',i),1:3,'UniformOutput',...
matlab 中 给出一组排列组合数作为下标在另一个数组中找到对应下标的数...
主要是排列组合命令 nchoosek,和 .* 的用法 代码如下:clc;clear;n = 1:5;A = 1:5;x = nchoosek(n,3);result = A(x(:,1)) .* A(x(:,2)) .* A(x(:,3))
matlab随机排列组合
A=[1 2 3];B=[4 5 6];C=[7 8 9];a1=nchoosek(1:3,2);[m n]=size(a1);r=[];for i=1:m for j=1:m for k=1:m r=[r;A(a1(i,:)) B(a1(j,:)) C(a1(k,:))];end end end
Matlab对于一组已有数据的多种排列组合
a=1:10;%十个数,可以是其他不同的十个r=zeros(size(a));%每个位置出现的次数,初始化全部为零for i=1:100 b=a(randperm(length(a)));%b就是a中10个数的随机顺序排列 ind=find(b==1);%找到1的位置,也可以是其他a中的数字 r(ind)=r(ind)+1;%对应位置记录加1个end ...
matlab 排列组合程序
组合命令:nchoosek,例子 nchoosek(1:5,3)%在[1 2 3 4 5]里取3个的全部组合 然后你可以对每一种组合(每一行)进行相应的计算即可