java如果给定单个行和列的总和,如何用随机数填充m x n矩阵?
我需要编写一个Java程序来生成一个包含3行5列的矩阵,以便: (1) 每行的总和是R。 (2) 列的总和为C1、C2、C3、C4、C5
满足这些条件中的任何一个都是非常简单的,例如,为了满足条件(1),我将生成5个介于0和1之间的随机数,计算它们的和,然后按比例放大它们,使它们的和等于R
或者我可以通过生成3个随机数并将它们放大,使它们的和为C1(或C2、C3等)来满足条件(2)
但是我不知道如何同时满足这两个条件
如果重要的话,所有的数字都是正数。它们可能是也可能不是整数
# 1 楼答案
R1、R2、R3是每行的总和。它们被定义为R
E就是一切。所有行和列的总和
根据定义,可以用列和除以行数填充每个单元格
如果输入是这样的
3 * R ≠ C1 + C2 + C3 + C4 + C5
,则没有解决方案下面是一个演示,说明为什么你可以一次平衡两对
使用5,9,13,7,8的C值:
选择距离为1的成对距离,向右移动一步,直到到达最后一列。注意,在E->;A
然后所有两对距离2
只要两人保持一定距离,你就可以重复练习<;w/2
然后,对于每一对水平线,你需要一对相等且相反的线。在同样的过程中被发现。 1:2,2:3,3:1.
(对于任何无序对p,两列之间的距离始终等于或小于矩阵宽度的一半。我们从每列开始,抓住距离增加的一对,选择了每一对右手对。)
任何矩阵都有
(int)w/2 * (int)h/2
唯一的无序对。 (这是一种截断,而不是四舍五入)以下是完整的代码,并进行了合理性检查:
以及输出: