本帖最后由 qibbxxt 于 2011-1-9 21:50 编辑
从算法的角度分析,用排除法去考虑:
1.这组数字里面不能包含5:如果包含5,5必须在个位,那么此数就不能被2,4,6,8整出,那么2,4,6,8就不 在这组数字中,那么数字的个数就不足7个。
2.这组数字组成的数必然能被3整除,若不能,则,3,6,9不在其中,数字个数不足7.
3.根据2,7个数的个位数字之和必然能被3整除,剩下的数字1,2,3,4,6,7,8,9之和是40,去掉一个数还能被3整除,这个数字只能是1,4,7中的一个,若去掉1或者7,该数均不能被9整除,那样9也要去掉,所以只能去掉4,剩下的数组之和是36.
4.这样一来这组数组就由1,2,3,6,7,8,9组成
5.考虑到偶数的原因,在进行过滤
那么程序如下:- clear;clc;close all
- tic
- g=feval(@(x)x(mod(x(:,1),2)==0,:),perms([1:3,6:9]))*10.^(0:6)';
- f=feval(@(y,z)y(z),g,all(~bsxfun(@mod,g,[1:3,6:9]),2));
- toc
复制代码- Elapsed time is 0.003474 seconds.
复制代码 考虑易读性- tic
- g=perms([1:3,6:9])*10.^(0:6)';
- g(mod(g(:,1),2)~=0,:)=[];
- f=all(~bsxfun(@mod,g,[1:3,6:9]),2);
- res=g(f);
- toc
复制代码- Elapsed time is 0.003325 seconds.
复制代码 |