【发布时间】:2017-09-16 02:47:29
【问题描述】:
我想生成一个整数数组,其中数组中每一行和每一列的总和是已知的,例如,如果我在 c++ 中创建一个 4 x 4 数组,然后用 1 到 100 之间的数字伪随机填充它:
int array[4][4] = {} ;
for(int x = 0 ; x<4 ; x++){
for(int y = 0 ; y<4 ; y++){
array[x][y] = rand() % 100 + 1 ;
}
}
数组将是:
8, 50, 74, 59
31, 73, 45, 79
24, 10, 41, 66
93, 43, 88, 4
如果我将每一行和每一列相加:
int rowSum[4] = {} ;
int columnSum[4] = {} ;
for(int x = 0 ; x < 4; x++){
for(int y = 0 ; y < 4; y++){
rowSum[x] += array[x][y] ;
columnSum[y] += array[x][y] ;
}
}
rowSum 为{191,228,141,228},columnSum = {156,176,248,208}
我现在要做的是生成任何满足rowSum 和columnSum 的随机 4x4 1~100 数组列总和,我一直在尝试编写将生成它的代码部分,如果有人能给我一个线索,我将不胜感激。
【问题讨论】:
-
嘿嘿。有很多超过几千。我写了一个小蛮力搜索,在搜索空间的早期,它找到了 35 亿个 解决方案。
-
@Gene 解的数量是无限的(实际上受整数大小的限制)。
-
@n.m.我从他的例子中推断出他想要非负样本。
-
@Gene 哦,那显然是有界的。
-
是的,我理解指数的力量,这就是为什么写一些算法而不是暴力破解应该更容易