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

นับแถว/คอลัมน์ที่มีผลรวมเท่ากับผลรวมในแนวทแยงใน C++


เราได้รับเมทริกซ์ซึ่งเป็นอาร์เรย์ 2 มิติที่มีแถวและคอลัมน์ และภารกิจคือการคำนวณจำนวนรวมของแถวและคอลัมน์ทั้งหมดให้เท่ากับ ผลรวมของเมทริกซ์หลักหรือรอง

ป้อนข้อมูล

int arr[row][col] = {
   { 4, 1, 7 },
   { 10, 3, 5 },
   { 2, 2, 11}
}

ผลผลิต − จำนวนแถว/คอลัมน์ที่มีผลรวมเท่ากับผลรวมในแนวทแยงคือ &mins; 2

คำอธิบาย

ผลรวมของเส้นทแยงมุมหลักคือ:4 + 3 + 11 =18 และผลรวมของเส้นทแยงมุมรองคือ:7 + 3 + 2 =12 ผลรวมของแถวคือ 4 + 1 + 7 =12(TRUE), 10 + 3 + 5 =18 (TRUE), 2 + 2 + 11 =15(FALSE) และผลรวมของคอลัมน์คือ:4 + 10 + 2 =16(FALSE), 1 + 3 + 2 =6(FALSE), 7 + 5 + 11 =23( เท็จ). ดังนั้น จำนวนแถว/คอลัมน์ที่ตรงกับผลรวมของเส้นทแยงมุมหลักและเส้นทแยงมุมรองคือ − 2

ป้อนข้อมูล

int arr[row][col] = {
   { 1, 2, 3 },
   { 4, 5, 2 },
   { 7, 9, 10}
}

ผลผลิต − จำนวนแถว/คอลัมน์ที่มีผลรวมเท่ากับผลรวมในแนวทแยง − 2

คำอธิบาย

ผลรวมของเส้นทแยงมุมหลักคือ:1 + 5 + 10 =16 และผลรวมของเส้นทแยงมุมรองคือ:7 + 3 + 5 =15 ผลรวมของแถวคือ 1 + 2 + 3 =6(FALSE), 4 + 5 + 2 =11 (FALSE), 7 + 9 + 10 =26(FALSE) และผลรวมของคอลัมน์คือ:7 + 4 + 1 =12(FALSE), 9 + 5 + 2 =16(TRUE), 3 + 2 + 10 =15( จริง). ดังนั้น จำนวนแถว/คอลัมน์ที่ตรงกับผลรวมของเส้นทแยงมุมหลักและเส้นทแยงมุมรองคือ − 2

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • สร้างอาร์เรย์ 2 มิติเพื่อสร้างเมทริกซ์ขนาดแถวและขนาดคอลัมน์

  • สร้างตัวแปรสำหรับเมทริกซ์หลักและรอง นอกจากนี้ยังมีตัวแปรการนับเพื่อเก็บการนับ

  • เริ่มวนรอบ FOR จาก i ถึง 0 จนถึง col และ j จาก col - 1 จนถึง col เพิ่ม i และลดค่า j

  • ภายในลูป ตั้งค่าหลักเป็นหลัก + เมทริกซ์[i][i] และรองเป็นรอง + เมทริกซ์[i][j]

  • เริ่มวนซ้ำ FOR จาก i ถึง 0 จนถึง col

  • ภายในลูป ตั้งค่าแถวเป็น 0 และ col เป็น 0 และภายในลูป เริ่มลูปอื่น FOR จาก j ถึง 0 จนถึง col

  • ภายในลูป ตั้งค่า row เป็น row + matrix[i][j]

  • ภายในลูป เริ่มลูปอื่น FOR จาก j ถึง 0 จนถึง col

    ภายในลูป col to col + matrix[j][i]
  • ภายในลูป ให้ตรวจสอบ IF (row ==principal) || (แถว ==รอง) แล้วเพิ่มจำนวนขึ้น 1

  • ภายในลูป ให้ตรวจสอบ IF (col ==principal) || (col ==รอง) จากนั้นเพิ่มจำนวนขึ้น 1

  • คืนจำนวน

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#include <iostream>
#define row 3
#define col 3
using namespace std;
int diagonal_sum(int matrix[row][col]){
   int principal = 0;
   int secondary = 0;
   int r = 0;
   int c = 0;
   int count = 0;
   int i = 0, j = 0;
   for (i = 0, j = col - 1; i < col; i++, j--){
      principal += matrix[i][i];
      secondary += matrix[i][j];
   }
   for (int i = 0; i < col; i++){
      r = 0;
      c = 0;
      for (int j = 0; j < col; j++){
         r += matrix[i][j];
      }
      for (int j = 0; j < col; j++){
         c += matrix[j][i];
      }
      if ((r == principal) || (r == secondary)){
         count++;
      }
      if ((c == principal) || (c == secondary)){
         count++;
      }
   }
   return count;
}
int main(){
   int matrix[row][col] = {
      { 4, 1, 7 },
      { 10, 3, 5 },
      { 2, 2, 11}};
   cout<<"Count of rows/columns with sum equals to diagonal sum are: "<<diagonal_sum(matrix);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Count of rows/columns with sum equals to diagonal sum are: 2