Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ผลรวมสูงสุดขององค์ประกอบจากแต่ละแถวในเมทริกซ์ใน C++


ในปัญหานี้ เราได้รับเสื่อเมทริกซ์สองตัว[][] งานของเราคือสร้างโปรแกรมเพื่อค้นหาผลรวมสูงสุดขององค์ประกอบจากแต่ละแถวในเมทริกซ์ในภาษา C++

คำอธิบายปัญหา

ที่นี่ เราจะหาผลรวมสูงสุดโดยนำองค์ประกอบหนึ่งรายการจากแต่ละแถวของเมทริกซ์ในลักษณะที่องค์ประกอบในแถวปัจจุบันมีค่ามากกว่าองค์ประกอบแถวสุดท้ายที่จะพิจารณาเป็นผลรวม เราจะหาผลรวมสูงสุดขององค์ประกอบที่เป็นไปตามเงื่อนไขข้างต้นและพิมพ์ -1 หากเป็นไปไม่ได้

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

mat[][] = {{4, 6, 1},
{2, 5, 7},
{9, 1, 2}}

ผลลัพธ์

22

คำอธิบาย

1st row = 6
2nd row = 7
3rd row = 9
Sum = 6 + 7 + 9 = 22

แนวทางการแก้ปัญหา

วิธีแก้ไขง่ายๆ คือเริ่มจากแถวสุดท้ายของเมทริกซ์ ค้นหาจำนวนที่มากที่สุดที่นี่ และเพิ่มใน MaxSum จากนั้นเลื่อนขึ้นหนึ่งแถว ค้นหาจำนวนที่มากที่สุดซึ่งน้อยกว่าองค์ประกอบที่ใหญ่ที่สุดของแถวด้านล่าง ทำเช่นนี้จนถึงแถวบนสุด หากเราไม่พบตัวเลขใดๆ ที่น้อยกว่าจำนวนสูงสุด เราจะคืนค่า -1

ตัวอย่าง

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

#include <iostream>
using namespace std;
# define row 3
# define col 3

int RowMaxSum(int a[row][col]){
   int maxValLastRow = 10000;
   int maxSum = 0;
   for (int i = row - 1; i >= 0; i--){
      int maxNo = -1;
      for (int j = 0; j < col; j++)
         if (maxValLastRow > a[i][j] && a[i][j] > maxNo)
            maxNo = a[i][j];
      if (maxNo == -1)
         return -1;
      maxValLastRow = maxNo;
      maxSum += maxValLastRow;
   }
   return maxSum;
}
int main(){
   int a[3][3] = {{4, 6, 1},
                  {2, 5, 7},
                  {9, 1, 2}};
   cout<<"The maximum sum of elements from each row in the matrix is "<<RowMaxSum(a);
   return 0;
}

ผลลัพธ์

The maximum sum of elements from each row in the matrix is 22