这个问题很有意思,你看看我编的这个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
温馨提示:答案为网友推荐,仅供参考