在 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
廣告