C ++での長さa、b、cのセグメントの最大数
与えられた正の整数Nから形成できる長さa、b、cの線分の最大数を見つけることがタスクです。
例を使用して、私たちがしなければならないことを理解しましょう-
入力 − n =8、a =3、b =1、c =2
出力 − 8
説明 − nは、作成可能なセグメントの最大数であるbの8つのセグメントに分割できます。
入力 − n =13、a =2、b =7、c =3
出力 − 6
以下のプログラムで使用されるアプローチは次のとおりです
-
関数MaxSegment()で、int型の配列MaxSeg [N +1]を宣言し、値-1で初期化します。
-
セグメントがないため、0番目のインデックスを0に設定します。
-
i =0からi
-
上記のifステートメントの中に別のステートメントを入れますif(i + a <=N)and putMaxSeg [i + a] =max(MaxSeg [i] + 1、MaxSeg [i + a]);
-
bとcの両方について上記の手順を繰り返します。
-
ループの外側で、MaxSeg[N]を返します。
例
#include <bits/stdc++.h> using namespace std; int MaxSegment(int N, int a,int b, int c){ /* It will store the maximum number of segments each index can have*/ int MaxSeg[N + 1]; // initialization memset(MaxSeg, -1, sizeof(MaxSeg)); // 0th index will have 0 segments MaxSeg[0] = 0; // traversing for every segments till n for (int i = 0; i < N; i++){ if (MaxSeg[i] != -1){ if(i + a <= N ){ MaxSeg[i + a] = max(MaxSeg[i] + 1, MaxSeg[i + a]); } if(i + b <= N ){ MaxSeg[i + b] = max(MaxSeg[i] + 1, MaxSeg[i + b]); } if(i + c <= N ){ MaxSeg[i + c] = max(MaxSeg[i] + 1, MaxSeg[i + c]); } } } return MaxSeg[N]; } int main(){ int N = 13, a = 2, b = 7, c = 3; cout << MaxSegment(N, a, b, c); return 0; }
出力
上記のコードを実行すると、次の出力が得られます-
6
-
C++でNセグメントを使用して7セグメントディスプレイに表示できる最大数
与えられたタスクは、7セグメントディスプレイのant番号でNセグメントを使用して表示できる最大数を見つけることです。 例を使用して、私たちがしなければならないことを理解しましょう- 入力 − n =5 出力 − 71 説明 −最大数は7セグメントディスプレイに次のように表示されます- 入力 − n =6 出力 − 111 以下のプログラムで使用されるアプローチは次のとおりです 次の状況は3つのケースに分けることができます- ケース1 − Nが0または1の場合、数値を表示することはできません。 ケース2 − Nが奇数の場合。その場合、奇数
-
C++で指定された数kで割り切れるリンクリストの最大要素と最小要素
リンクリストは、要素がポインタを介してリンクされている線形データ構造です。リンクリストの各要素またはノードには、データ部分とリンクがあります。または、次の要素へのポインタを順番に言うことができます。要素は、メモリ内で連続していない場所を取ることができます。 データ部分と次の要素へのリンクがある単一リンクリストが与えられます。もう1つの入力は数値Kです。タスクは、数値Kで割り切れるリンクリストの最大要素と最小要素を見つけることです。線形リンクリストは、一方向にのみ移動できます。各ノードで、データ部分の分割可能性をKで確認します。その数がこれまでに見つかった最大値または最小値である場合は、