我想生成一个12*12的矩阵,其中每行和每列正好有6个奇数和6个偶数,范围从1到12。对于每列,没有重复的数字。
问题是我只知道如何分别设置行和列的编号,当我确定列是正确的时候,行就有问题了,不管怎样,我能保证行和列的条件同时达到吗?
我是一个完全的新手,所以请原谅我为这个简单的函数写了这么长的代码:(
这是我写的R代码:
set.seed(123)mat <- matrix(NA, nrow = 12, ncol = 12)
for (i in 1:12)
{
even_nums <- sample(seq(2, 12, 2), 6)
odd_nums <- sample(seq(1, 11, 2), 6)
row_nums <- sample(c(even_nums, odd_nums))
while (sum(row_nums %% 2 == 0) != 6 | sum(row_nums %% 2 == 1) != 6) {
even_nums <- sample(seq(2, 12, 2), 6)
odd_nums <- sample(seq(1, 11, 2), 6)
row_nums <- sample(c(even_nums, odd_nums))
}
mat[i, ] <- row_nums }
for (j in 1:12)
{
even_nums <- sample(seq(2, 12, 2), 6)
odd_nums <- sample(seq(1, 11, 2), 6)
col_nums <- sample(c(even_nums, odd_nums))
while (any(duplicated(col_nums)) | sum(col_nums %% 2 == 0) != 6 | sum(col_nums %% 2 == 1) != 6)
{
even_nums <- sample(seq(2, 12, 2), 6)
odd_nums <- sample(seq(1, 11, 2), 6)
col_nums <- sample(c(even_nums, odd_nums))
}
mat[, j] <- col_nums
}
mat
1条答案
按热度按时间ubof19bj1#
要获得一个随机的n × n矩阵,其中每个
1:n
在每列和每行中都只出现一次:但是,这是过度约束,因为只在列中禁止重复。要放松约束,使每行只需要6个偶数和6个奇数,请在每列中的偶数之间进行 Shuffle ,并对奇数进行同样的操作。
n = 12
示例: