B=[11 14 17 19]
C=[21 23 27]
D=[30 32 33]
a=nchoosek(1:3,2)
b=nchoosek(1:4,2)
c=nchoosek(1:3,1)
[ma na]=size(a)
[mb nb]=size(b)
[mc nc]=size(c)
r=[]
for i=1:ma
for j=1:mb
for k=1:ma
for p=1:mc
r=[rA(a(i,:)) B(b(j,:)) C(a(k,:)) D(c(p,:))]
end
end
end
end
第一题链仿程序:
1-nchoosek(51,18)/nchoosek(54,18)
结果:0.7121
第二题程序:
3^18/nchoosek(54,18)
结谈唤颂果含郑:3.9971e-006
楼上的答案是正确的,但存在一些小问题:
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)