两个数和的最大值

二维数组—两个数和的最大值

problem: 给定一个二维数组,找两个数使其和为最大的,要求这两个数不同行不同列。

solution:

  把二维数组转换为一维数组,那么一维数组的长度为N = ROW * COL,

假设二维数组a[2][3] = { {1, 3, 1}, {2, 4, 5} };那么其二维数组为b[6] = { 1, 3, 1, 2, 4, 5 };

那么存在这样的关系b[i] = a[i / COL][i % COL],此时ROW = 2, COL = 3;

比如 b[2] = a[2/3][2%3] = a[0][2] = 1;有了这层关系,就可以做了.

如此就可以求出最大值了,时间复杂度为O(N2);

/*problem: 给定一个二维数组,找两个数使其和为最大的,要求这两个数不同行不同列。solution:把二维数组转换为一维数组,那么一维数组的长度为N = ROW * COL,假设二维数组a[2][3] = { {1, 3, 1}, {2, 4, 5} };那么其二维数组为b[6] = { 1, 3, 1, 2, 4, 5 };那么存在这样的关系b[i] = a[i / COL][i % COL],此时ROW = 2, COL = 3;比如 b[2] = a[2/3][2%3] = a[0][2] = 1;有了这层关系,就可以做了,对一维数组的b[i](i = 0,1,2…… ,N – 1)开始,分别与b[0] – b[N – 1]相加,,判断是否满足“不同行不同列”的条件,满足就把maxVal求出来,与之前的maxVal做比较,把较大的给maxVal,直到比较结束,如此就可以求出最大值了,时间复杂度为O(N2);*/#include <stdio.h>#include <stdlib.h>COL 3 main(void){int a[ROW][COL] = { {1, 3, 1},{iterx = N = ROW * COL; maxVal = maxsubF = x = (iterx = 0; iterx < N; iterx++){for(itery = 0; itery < N; itery++){maxsubF = a[iterx / COL][iterx % COL];//第一个数FmaxsubS = a[itery / COL][itery % COL];//第二个数S(maxsubF + maxsubS > maxVal && (iterx / COL != itery / COL) && (iterx % COL != itery % COL)){maxVal = maxsubF + maxsubS;x = iterx;y = itery;}}}printf(, maxVal);printf(, x / COL, x % COL , a[x / COL][x % COL], y / COL, y % COL, a[y / COL][y % COL]);return 0;}

View Code

   此程序不仅适用于整型,也可以适用于浮点型,只要将相应的类型做修改即可,数组的维数也可修改!

风不懂云的漂泊,天不懂雨的落魄,眼不懂泪的懦弱,

两个数和的最大值

相关文章:

你感兴趣的文章:

标签云: