程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 二維數組---兩個數和的最大值

二維數組---兩個數和的最大值

編輯:C++入門知識

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);    

/* 
    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>  
#define ROW 2   //行數  
#define COL 3   //列數  
//typedef double ArrayType;  
int main(void)  
{  
    int a[ROW][COL] = { {1, 3, 1},  
                        {2, 4, 5}};// 給定的二維數組  
    int iterx = 0, itery = 0;// 用於循環計數控制  
    int N = ROW * COL;    //一維數組的長度  
    int maxVal = 0;//存儲最大數值  
    int maxsubF = 0 , maxsubS = 0;// F :First number    S: Second number  
    int x = 0, y = 0;  // 保存兩個數字的位置  
    for(iterx = 0; iterx < N; iterx++)  
    {  
        for(itery = 0; itery < N; itery++)  
        {  
            maxsubF = a[iterx / COL][iterx % COL];//第一個數F  
            maxsubS = a[itery / COL][itery % COL];//第二個數S  
            //不同行不同列的判讀,和最大值的判斷  
            if(maxsubF + maxsubS > maxVal && (iterx / COL != itery / COL) && (iterx % COL != itery % COL))  
            {  
                maxVal = maxsubF + maxsubS;  
                x = iterx;  
                y = itery;  
            }  
        }  
    }  
    printf("The MAX sum is %d \n", maxVal);  
    printf("first NUM: a[%d][%d] = %d,  Second NUM: a[%d][%d] = %d\n", x / COL, x % COL , a[x / COL][x % COL], y / COL, y % COL, a[y / COL][y % COL]);  
    return 0;  
}  

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved