在C ++中具有给定约束的N * N矩阵中的最大个数

给定任务是在以下约束下找到二进制矩阵中可能的最大数目。

给出两个整数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){
   //所需的最小零个数
   int Z = (N / X);
   Z = Z * Z;
   /* Totol elements in matrix = square of the size of the matrices*/
   int total =N * N;
   //最终答案
   int ans = total - Z;
   return ans;
}
int main(){
   int N = 4;
   int X = 2;
   cout << MaxOne(N, X);
   return 0;
}

输出结果

如果运行上面的代码,我们将获得以下输出-

12