チョコレートをC++で分割する
いくつかのチャンクで構成されるチョコレートバーが1つあるとします。各チャンクには、甘さと呼ばれるリストによって与えられる独自の甘さがあります。 K人の友達の間でチョコレートを共有したいので、Kカットを使用してチョコレートバーをK + 1ピースにカットし始めると、各ピースはいくつかの連続したチャンクで構成されます。総甘さを最小限に抑えた作品を取り出し、他の作品を友達にあげれば。チョコレートバーを最適にカットすることで、得られる最大の総甘さを見つける必要があります。
したがって、入力が甘さ=[1,2,3,4,5,6,7,8,9]、K =5のようである場合、チョコレートを[1,2に分割できるため、出力は6になります。 、3]、[4,5]、[6]、[7]、[8]、[9]これらのピース。
これを解決するには、次の手順に従います-
-
関数ok()を定義します。これは、配列v、cuts、maxVal、
を取ります。 -
カウンター:=0、温度:=0
-
初期化i:=0の場合、i <=vのサイズの場合、更新(iを1増やします)、実行-
-
temp> =maxValの場合、
-
(カウンターを1増やします)
-
temp:=0
-
-
iがvのサイズと同じである場合、-
-
ループから出てきます
-
-
temp:=temp + v [i]
-
-
カウンター>=カット
の場合はtrueを返します -
メインの方法から、次の手順を実行します。
-
maxa:=-1
-
n:=sのサイズ
-
低:=0、高:=0
-
初期化i:=0の場合、i
-
low:=lowとs[i]
の最小値 -
高:=高+ s [i]
-
-
(1ずつ高くします)
-
低<高、実行-
-
中:=低+(高-低+ 1)/ 2
-
ok(s、k + 1、mid)が真の場合、-
-
低:=中
-
-
それ以外の場合
-
高:=中-1
-
-
-
ローに戻る
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: bool ok(vector <int> v, int cuts, int maxVal){ int counter = 0; int temp = 0; for (int i = 0; i <= v.size(); i++) { if (temp >= maxVal) { counter++; temp = 0; } if (i == v.size()) { break; } temp += v[i]; } return counter >= cuts; } int maximizeSweetness(vector<int>& s, int k) { int maxa = -1; int n = s.size(); int low = 0; int high = 0; for (int i = 0; i < n; i++) { low = min(low, s[i]); high += s[i]; } high++; while (low < high) { int mid = low + (high - low + 1) / 2; if (ok(s, k + 1, mid)) low = mid; else high = mid - 1; } return low; } }; main(){ Solution ob; vector<int> v = {1,2,3,4,5,6,7,8,9}; cout << (ob.maximizeSweetness(v, 5)); }
入力
{1,2,3,4,5,6,7,8,9}, 5
出力
6
-
C++で2つの整数を除算する
2つの整数の被除数と除数があるとします。乗算、除算、モジュロ演算子を使用せずに2つの整数を除算する必要があります。被除数を除数で割った後、商を返します。整数除算はゼロに向かって切り捨てる必要があります。両方の入力は整数です したがって、与えられた入力が被除数=7、除数=-3の場合、出力は-2になります。 これを解決するには、次の手順に従います- 2つの引数xとyを取ると、xがyを除算することを示します x<-Infinityおよびy=1の場合、無限大を返します a:=| x |、b:=| y |およびans:=0 =0 p:=0 =0 p:=p + 1 a:=a
-
C ++でゼロ除算エラーをキャッチする方法は?
以下は、ゼロ除算エラーをキャッチする例です。 例 #include <iostream> using namespace std; int display(int x, int y) { if( y == 0 ) { throw "Division by zero condition!"; } return (x/y); } int main () { int a = 50; int b =