我正在尝试以编程方式解决数学问题。我有一个6x5网格,有一些预定义的数字,我必须找到其余的数字,所有行和列的条件应该总共34。
//网格
static int[][] sq;
static void Main(string[] args)
{
sq = new int[6][];
for (int i = 0; i < sq.Length; i++)
{
sq[i] = new int[5] { -250, -250, -250, -250, -250, };
}
SetDefaults();
Print();
Console.WriteLine("Press enter to quit...");
Console.ReadLine();
}
static void SetDefaults()
{
sq[0][0] = 7;
sq[0][1] = 6;
sq[0][2] = 8;
sq[2][2] = 9;
sq[2][3] = 8;
sq[2][4] = 5;
sq[3][1] = 9;
sq[3][3] = 7;
sq[3][4] = 5;
sq[4][0] = 4;
sq[4][1] = 4;
sq[4][4] = 9;
sq[5][0] = 8;
sq[5][2] = 3;
sq[5][3] = 6;
sq[5][4] = 8;
}
static void Print()
{
Console.WriteLine();
for (int i = 0; i<sq.Length; i++)
{
for (int ii = 0; ii < sq[i].Length; ii++)
{
Console.Write("[" + sq[i][ii] + "\t]");
}
Console.WriteLine();
}
Console.WriteLine();
}
我认为一种方法是尝试所有可能性,范围为500个数字,从-250到250,或增量范围(-1,1,然后-2,2等),但我不知道如何以编程方式执行此操作,效率低得多。
答案 0 :(得分:0)
我有一个6x5网格
列数和行数不同? 然后,无论网格中的内容如何,根本没有解决办法使所有金额相等。因此,无需编码。
没有付出太多精力,但如果你真的想要枚举某些东西,你可以(但不应该)尝试这种天真且未经优化的方法(对于0到15之间的整数范围):< / p>
for (int a = 0; a < 16; a++) {
for (int b = 0; b < 16; b++) {
for (int c = 0; c < 16; c++) {
for (int d = 0; d < 16; d++) {
for (int e = 0; e < 16; e++) {
for (int f = 0; f < 16; f++) {
for (int g = 0; g < 16; g++) {
for (int h = 0; h < 16; h++) {
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 16; j++) {
for (int k = 0; k < 16; k++) {
for (int l = 0; l < 16; l++) {
for (int m = 0; m < 16; m++) {
for (int n = 0; n < 16; n++) {
// test all columns and rows:
// test if 7 + 8 + 9 + a + b == 34
// test if c + d + e + f + g == 34
...
}}}}}}}}}}}}}}
当然可以优化很多,例如:
for (int a = 0; a < 16; a++) {
var b = 34 - 7 - 8 - 9 - a;
for (int c = 0; c < 16; c++) {
for (int d = 0; d < 16; d++) {
for (int e = 0; e < 16; e++) {
for (int f = 0; f < 16; f++) {
var g = 34 - c - d - e - f;
for (int h = 0; h < 16; h++) {
var i = 34 - 9 - 8 - 5 - h;
for (int j = 0; j < 16; j++) {
var k = 34 - 9 - 7 - 5 - j;
for (int l = 0; l < 16; l++) {
var m = 34 - 4 - 4 - 9 - l;
var n = 34 - 8 - 3 - 6 - 8;
// test all columns only:
// test if 7 + c + h + 4 + 8 == 34
...
}}}}}}}}
但最终,最佳优化是返回&#34;没有解决方案&#34;直接