在 C++ 中根據給定約束條件求解 N*N 矩陣中 1 的最大個數


任務是找到在滿足以下約束條件下,二進位制矩陣中可能的 1 的最大個數。

給定兩個整數 N 和 X,其中 X<=N。二進位制矩陣的大小應為 N*N,並且每個大小為 X*X 的子矩陣都應至少包含一個零。

讓我們用一個例子來理解我們必須做什麼:

輸入 - N=4,X=2

輸出 - 12

說明 - 結果矩陣將是:

1 1 1 1
1 0 0 1
1 0 0 1
1 1 1 1

輸入 - N=7,X=3

輸出 - 45

下面程式中使用的方法如下:

  • 為了獲得 1 的最大個數,我們首先必須找到矩陣中所需的零的最小個數。

    透過觀察所有矩陣中的共同模式,可以看出所需的零的個數 = (N / X)2

    因此,1 的最大個數 = 矩陣中的元素總數 - 零的個數

  • 在 MaxOne() 函式中,建立一個 int 型別的變數 Z,並將所需的零的最小個數 (N / X)2 儲存在其中。

  • 然後初始化另一個 int 型別的變數 total = N*N 來儲存矩陣的總大小。

  • 最後,初始化 int ans = total – Z 來儲存最終答案並返回 ans。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int MaxOne(int N, int X){
   // Minimum number of zeroes that are needed
   int Z = (N / X);
   Z = Z * Z;
   /* Totol elements in matrix = square of the size of the matrices*/
   int total =N * N;
   //Final answer
   int ans = total - Z;
   return ans;
}
int main(){
   int N = 4;
   int X = 2;
   cout << MaxOne(N, X);
   return 0;
}

輸出

如果我們執行上面的程式碼,我們將得到以下輸出:

12

更新於:2020年8月17日

91 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告