用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个,是随机抽样函数(正态分布、指数分布很多呀)吗?什么叫做行列共同作用。你要有思路,你自己给哥表达式,否则看不懂。

用matlab对4行4列数组A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16...
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; %结果计数器,记录满足要求的选取结果的...

MATLAB一向量[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15...]每几个数进行...
用reshape改变矩阵的型 b=reshape(a,5,2)得到结果如下:b = 1 6 2 7 3 8 4 9 5 10 求取平均值 mean(b)结果如下:>> mean(b)ans = 3 8

如何创建数组,索引数组
第一步:首先我们需要创建一个数组或矩阵,如我们在MATLAB命令窗口中输入代码:a=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16;17 18 19 20]即可创建一个4行4列的数组,如下图所示。请点击输入图片描述 第二步:数组创建好后我们就可以进行数组或矩阵索引了,我们索引数组或矩阵时可以精确...

Matlab从数组查找并选出符合条件的值
clc clear A=[1 2 3 4 5 23 35 34 23 8 7 0 7 21 4 32 53 1 2 4 14];k=find(A>30);a=A(k);s=diff(k);if any(s>1)n=length(find(s>1));fprintf('有%d个不连续组:\\n',n+1)kk=find(s>1);if n==1 a1=a(1:kk)a2=a(kk+1:end)end else disp('全连续')...

matlab中如果要找到数组中的所有9,该如何操作呢?
1、第一步,需要知道matlab数组找到所有接近某个值的点的坐标是使用“find”函数,可以在命令行窗口中输入“help find”,如下图所示,然后进入下一步。2、其次,完成上述步骤后,输入“a =[1 4 5;6 7 8;7 9 12]”,在matlab命令行窗口中创建副本数组,如下图所示,然后进入下一步。3、接着...

matlab中,数组a=【1 2 3 4 5 6 7 8 9】 用find函数如何找出mod(a,3...
a=[1 2 3 4 5 6 7 8 9]pos=find(mod(a,3)==1)

matlab 删除数组中满足一定条件的元素
1、打开matlab,在命令行窗口中输入a=[1 5 6 7;8 12 14 16;6 3 5 7],创建一个3行4列的a矩阵。2、输入x=find(a>10),找到a数组中大于10的元素的下标。3、按回车键之后,可以看到找到大于10的元素下标,下标位置是按一列开始数,一列一列数的。4、输入a(x)=[],将a数组中大于10的...

MATLAB中,已知数组a=[1 2 3 4 5 6 7],怎么统计小于3或者大于5的个数...
统计数组中小于某个数的元素个数 a=[1,2,3,4,5,6,7];num1=1;num2=1;for j=1:7 if a(1,j)<=3 num1=num1+1;else if a(1,j)>=5 num2=num2+1;end end end num1 num2

怎么用matlab数组寻找靠近的值的点的坐标
1、首先需要知道matlab数组找靠近某个值的所有点坐标,是使用find函数,可以在命令行窗口中输入help find。2、在matlab命令行窗口中输入a=[1 4 5;6 7 8;7 9 12],创建a数组。3、输入[m,n]=find(a==9),找到a数组等于9的坐标。4、按回车键之后,可以看到a数组等于9的坐标有一个,是第3行...

在matlab中 a=[1,2,3;4,5,6;7,8,9] 分别计算a的数组平方和矩阵平方
a=[1,2,3;4,5,6;7,8,9];aa=a.^2 %数组平方 a_square=a^2 %矩阵平方

相似回答