用matlab对4行4列数组A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]筛选符合条件的4个数字。高手帮帮忙!!

4行4列数组中挑选4位数字。
例如:第一行挑选2个数字,第二行0个,第三行1个,第四行1个。
第一列挑选1个数字,第二列1个,第三列2个,第四列0个。
就是,输入条件为:行2,0 ,1 ,1。列输入1,1,2,0。(条件是可输入改变的)
结果输出所有符合条件的4位数字,如1,3,9,16就符合行列的条件。

请编程高手帮忙,非常感谢!
java, C++ ,均行。

这个问题很有意思,你看看我编的这个matlab程序是否符合你的要求

clear
clc
input_row=[2 0 1 1]; %输入各行个数,存入1*4的向量中,注意格式
input_column=[1 1 2 0]; %输入各列个数,存入1*4的向量中,注意格式

A=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]; % 四行四列数组
B=combntns(reshape(A,1,16),4); %对16个数进行排列组合出所有可能的选取结果
num=0; %结果计数器,记录满足要求的选取结果的个数
for i=1:size(B,1) %对所有的组合情况进行筛选
compare_row=[0 0 0 0]; %行对比数组,用于最后和input_row进行对比
compare_column=[0 0 0 0];%列对比数组,用于最后和input_column进行对比
for j=1:4 %每一种组合都包含四个数
row_num=fix((B(i,j)-1)/4)+1; %计算第i组第j个数的行号
column_num=mod(B(i,j)-1,4)+1;%计算第i组第j个数的列号
compare_row(row_num)=compare_row(row_num)+1; %对比数组中相应的行的的数字加1
compare_column(column_num)=compare_column(column_num)+1;%相应的列的的数字加1
end
if sum(compare_row==input_row)==4 && sum(compare_column==input_column)==4
num=num+1;
result(num,:)=A(B(i,:)); %如果输入数组和对比数组相同,则说明当前的一组数满足要求
end
end

if num>0
disp(['共有 ',num2str(num),' 种选取结果,每一行即为一种取法'])
disp(result)
else
disp('没有符合条件的选取结果')
end
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-23
程序不难,就是有几个地方不理解。你随机抽取吗?行取完的数,列还能取吗?
另外,,我要是一次,输入10个,那么一行去10个,或者更多,有没有什么限制?追问

是符合 *行+*列的条件的4位数所有可能。条件1:4行4列数组已知;条件2:**行和列的挑选是共同作用的**,我们只挑选4位数,所以不能输入10个。条件3:编程后行和列的条件是可输入改变的,例如输入行:2,0,1,1列:1,1,2,0 与 输入行:1,0,3,0列1,0,1,2最终的结果输出是符合上面2个各自条件的不同4位数

追答

弄得我一头雾水,你没明白我的意思。比如行取2个,是随机抽样函数(正态分布、指数分布很多呀)吗?什么叫做行列共同作用。你要有思路,你自己给哥表达式,否则看不懂。

相似回答