Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số điểm vô tận trong C ++

Trong bài toán này, chúng ta được cung cấp mảng hai chiều mat [n] [m]. Nhiệm vụ của chúng ta là tìm số điểm vô tận trong ma trận.

Bất kỳ điểm nào của ma trận được cho là vô tận nếu các phần tử tiếp theo của nó là 1. tức là

mat[i][j] is endless when mat[i+1][j] … mat[n][j] and
mat[i][j+1] … mat[i][m] are 1.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

mat[][] = {0, 0}
{1, 1}

Đầu ra

2

Giải thích

Mat phần tử [0] [1] và mat [1] [1] là vô tận.

Phương pháp tiếp cận giải pháp

Một giải pháp đơn giản cho vấn đề là lặp lại tất cả các phần tử của ma trận. Và đối với mỗi phần tử, hãy kiểm tra xem phần tử hiện tại có phải là vô tận hay không. Nếu có, hãy tăng số lượng. Trả lại số lượng sau khi kiểm tra tất cả các phần tử của mảng.

Phương pháp tiếp cận hiệu quả

Để giải quyết vấn đề, chúng tôi sẽ sử dụng lập trình động để kiểm tra xem các phần tử có phải là vô tận hay không. Đối với nó là vô tận tất cả các phần tử của hàng và cột của nó sau khi nó cần phải là 1.

Vì vậy, chúng tôi sẽ sử dụng hai ma trận DP để đếm vô tận hàng tiếp theo và vô tận cột tiếp theo cho mỗi chỉ mục. Và việc kiểm tra từng vị trí, nếu vị trí đó có hàng và cột vô tận tiếp theo. Sau đó, trả về số lượng các phần tử vô tận.

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

Ví dụ

#include <iostream>
#include <math.h>
using namespace std;
const int monthDays[12] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
int countLeapYearDays(int d[]){
   int years = d[2];
   if (d[1] <= 2)
      years--;
   return ( (years / 4) - (years / 100) + (years / 400) );
}
int countNoOfDays(int date1[], int date2[]){
   long int dayCount1 = (date1[2] * 365);
   dayCount1 += monthDays[date1[1]];
   dayCount1 += date1[0];
   dayCount1 += countLeapYearDays(date1);
   long int dayCount2 = (date2[2] * 365);
   dayCount2 += monthDays[date2[1]];
   dayCount2 += date2[0];
   dayCount2 += countLeapYearDays(date2);
   return ( abs(dayCount1 - dayCount2) );
}
int main(){
   int date1[3] = {13, 3, 2021};
   int date2[3] = {24, 5, 2023};
   cout<<"The number of days between two dates is "<<countNoOfDays(date1, date2);
   return 0;
}

Đầu ra

The number of days between two dates is 802