C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で指定された制約があるN*N行列の1の最大数


与えられたタスクは、次の制約で可能なバイナリ行列内の最大数を見つけることです。

X <=Nの場合、2つの整数NとXが与えられます。バイナリ行列のサイズはN*Nである必要があり、サイズX*Xのすべてのサブ行列には少なくとも1つのゼロが含まれている必要があります。

例を使って何をしなければならないかを理解しましょう-

入力 − 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の最大数=行列の要素の総数–0の数\

  • 関数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

  1. C ++を使用して、マトリックス内の合計が最大の列を検索します。

    サイズがMxNの行列があるとします。合計が最大の列を見つける必要があります。このプログラムでは、トリッキーなアプローチには従わず、配列を列ごとにトラバースし、各列の合計を取得します。合計が最大の場合は、合計と列インデックスを出力します。 例 #include<iostream> #define M 5 #define N 5 using namespace std; int colSum(int colIndex, int mat[M][N]){    int sum = 0;    for(int i = 0; i<M; i++){

  2. 特定の製品とのペアがC++のマトリックスに存在するかどうかを確認します

    次数NxMの行列が1つあり、積Kがあります。タスクは、指定された積のペアが行列に存在するかどうかを確認することです。 行列が次のようなものであると仮定します- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Kが42の場合、(6、7)のようなペアがあります この問題を解決するために、ハッシュを使用します。行列のすべての要素を取得してハッシュテーブルを作成します。行列のトラバースを開始し、トラバースしながら、行列の現在の要素が指定された積で割り切れるかどうかを確認します。積