在数组C中找到最大的2×2“平方”值

对于我的任务,我必须接受一组值,将它们保存到第二个数组并打印出4个最高值的“正方形”。 这意味着“square”,其元素之和在数组中最大。

Example: Given the array 1 2 3 4 5 6 7 8 9 10 11 12 the output should be 7 8 11 12 

我最初尝试使用嵌套for循环集来查找并将每个后续最大值存储到第二个数组中,但似乎无法找出正确的算法。 到目前为止,我只给了我相同的值(在这个例子中,12)。 另外,我已经意识到这种方式不允许我在第二个数组中保持格式相同。

我的意思是,如果我保存在数组b [0] [0]中找到的最大数字,它将在错误的位置,我的方块将关闭,看起来像:

 12 11 10 9 

这是我到目前为止所拥有的:

 int main(){ int og[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}, new[2][2]={}, rows; int columns, i, high,j,high2,high3,high4; high = new[i][0]; high2= high - 1; high3= high2 - 1; high4= high3 - 1; rows = 3; columns = 4; for (i=0; i<=rows; i++){ for(j=0; j<=columns; j++){ if (high < og[j][i]) high = og[j][i]; } } for(i=1;i<=rows;i++){ for(j=1;j<=columns;j++){ if(high2 < og[j][i]) high2= og[j][i]; } } printf("max = %d, %d\n", high, high2); //return high; system("pause"); return 0; 

逻辑应该大致如下(我没有编译器atm来测试它,所以如果我做了一个derpy错误,请在评论中告诉我):

 int i = 0; int j = 0; int max = 0; int sum = 0; int i_saved = 0; int j_saved = 0; for(i = 0; i < rows - 1; i++){ for(j =0; j < columns -1; j++){ sum = og[i][j] + og[i][j+1] + og[i+1][j] + og[i+1][j+1]; //sum the square if (sum > max){ max = sum; i_saved = i; j_saved = j; } } } 

由于OP要求使用的值以便保存到另一个数组,所以您只需要再次检索值! 我们已经保存了指数,所以这应该是相对微不足道的。

 int [][] arr = [2][2]; arr[0][0] = og[i_saved][j_saved]; arr[0][1] = og[i_saved][j_saved+1]; arr[1][0] = og[i_saved+1][j_saved]; arr[1][1] = og[i_saved+1][j_saved+1]; 

我们总结它们的方式相同,我们也可以使用该逻辑模式来提取它们!

我创建了这个解决方案

 #include  #include  using namespace std; int main() { int Mat[3][4]={{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; int maximum = 0; int Max_2x2[2][2] = {{1, 2}, {5, 6}}; for(int i = 0; i < 2; i++) { for(int j = 0; j < 3; j++) { maximum = max(Mat[i][j]+Mat[i][j+1]+Mat[i+1][j]+Mat[i+1][j+1], maximum); if(maximum == Mat[i][j]+Mat[i][j+1]+Mat[i+1][j]+Mat[i+1][j+1]) { Max_2x2[0][0] = Mat[i][j]; Max_2x2[0][1] = Mat[i][j+1]; Max_2x2[1][0] = Mat[i+1][j]; Max_2x2[1][1] = Mat[i+1][j+1]; } } } cout << maximum << endl; for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { cout << Max_2x2[i][j] << " "; } cout << endl; } return 0; } 

它给出了以下输出:

 38 // maximum solution 7 8 // output array 11 12 

这显然不是一般解决方案,但它适用于您的示例。

 int new[2][2]={} 

我不确定这是否有效。 您可能需要为每个单元格指定0值。 即使它不是必需的,这也是很好的做法。

 high = new[i][0]; 

我没有看到我在哪里被初始化。