所以我转换了一个二维矩阵:
int m[10][10];
int i, j, tmp;
main ()
{
// inlezen van de matrix
for (i=0; i<10; i++)
for (j=0; j<10; j++)
m[i][j] = getint();
到一维
int M[10*10];
int i, j, tmp;
int k, h;
main ()
{
// inlezen van de matrix
for (i=0; i<10; i++)
for (j=0; j<10; j++) {
k = 10 * j + i;
M[k] = getint();
}
最后,我们必须转换此代码,以便它对我们的一维数组有效:
// voer complexe bewerking uit op de matrix
for (i=0; i<10; i++)
for (j=5; j<15; j++)
m[i][j-5] += m[9-i][14-j];
... // Druk de matrix af
}
这是在书中这样完成的:
for (i=0; i<10; i++)
for (j=5; j<15; j++) {
k = 10 * j + i - 50; // 10*(j-5) + i = 10*j + i - 50
h = 149 - 10 * j - i // 10*(14-j) + (9-i) =
// 140 - 10*j + 9 - i = 149 - 10*j - i
M[k] += M[h];
}
但是我的解决方案是
for (k = 0; k < 100; k++)
M[k] += M[99-k]
我想知道我的解决方案是否也是正确的,因为上面所有代码所做的就是添加对称元素。这样可以用我的公式简化,对吧?
提前感谢帮助。
最佳答案
根据本书的代码,索引如下:
[k] [h]
[99][0] [89][10] [79][20] [69][30] [59][40] [49][50] [39][60] [29][70] [19][80] [9][90]
[98][1] [88][11] [78][21] [68][31] [58][41] [48][51] [38][61] [28][71] [18][81] [8][91]
[97][2] [87][12] [77][22] [67][32] [57][42] [47][52] [37][62] [27][72] [17][82] [7][92]
[96][3] [86][13] [76][23] [66][33] [56][43] [46][53] [36][63] [26][73] [16][83] [6][93]
[95][4] [85][14] [75][24] [65][34] [55][44] [45][54] [35][64] [25][74] [15][84] [5][94]
[94][5] [84][15] [74][25] [64][35] [54][45] [44][55] [34][65] [24][75] [14][85] [4][95]
[93][6] [83][16] [73][26] [63][36] [53][46] [43][56] [33][66] [23][76] [13][86] [3][96]
[92][7] [82][17] [72][27] [62][37] [52][47] [42][57] [32][67] [22][77] [12][87] [2][97]
[91][8] [81][18] [71][28] [61][38] [51][48] [41][58] [31][68] [21][78] [11][88] [1][98]
[90][9] [80][19] [70][29] [60][39] [50][49] [40][59] [30][69] [20][79] [10][89] [0][99]
所以答案是肯定的。为了减少循环次数,您可以尝试:
for (i=0; i<50; i++){
k = 50 - i;
h = i + 50;
tmp = M[k];
M[k] += M[h];
if (i != 0) M[h] += tmp; //No not sum twice [50]
}