C++で材料の無駄がないハンバーガーの数
2つの整数tomatoSlicesとcheeseSlicesがあるとします。これらはさまざまなハンバーガーの材料です-
- ジャンボバーガー:トマトスライス4枚とチーズスライス1枚。
- スモールバーガー:トマトスライス2枚とチーズスライス1枚。
[total_jumbo、total_small]を見つけて、残っているtomatoSlicesの数が0に等しく、残っているcheeseSlicesの数も0になるようにする必要があります。残りのtomatoSlicesとcheeseSlicesを0に等しくすることができない場合はreturn []。したがって、入力がtomatoSlices=16およびchesseSlices=7の場合、出力は[1、6]になります。つまり、1つのジャンボバーガーと6つの小さなハンバーガーを作るには、4 * 1 + 2 * 6=16のトマトスライスと1+6=7のチーズスライスが必要です。
これを解決するには、次の手順に従います-
- ansと呼ばれる1つの配列を作成します
- トマトが奇数またはチーズ>トマト/2またはトマト>4*チーズの場合は、回答を返します
- x:=(4 *チーズ-トマト)/ 2
- y:=(トマト–(2 * x))/ 4
- yを挿入してからxを配列ansに挿入します
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> numOfBurgers(int t, int c) { vector <int> ans; if(t % 2 != 0 || c > t/2 || t > c*4)return ans; int x = (4 * c - t) / 2; int y = ( t - (2 * x) )/ 4; ans.push_back(y); ans.push_back(x); return ans; } }; main(){ Solution ob; print_vector(ob.numOfBurgers(16,7)); }
入力
16 7
出力
[1, 6, ]
-
C++のb-baseで数値Nが1で始まるかどうかを確認します
数Nと底bがあります。このプログラムでは、基数bの1から始まるかどうかを確認する必要があります。番号6が与えられたと仮定します。バイナリではこれは110なので、1から始まり、ベース4でも12 4になります。 。ここでも1から始まります。 ご存知のように、基数bで数値Nが表される場合、bはm+1ビットシーケンスbmbm-1…b0に変換されます。これは、b mを意味します b m + b m-1 * b m-1 +…+b 0 * b 0 =N。最大数は2*b mになります。 –1.Nはbmにあります ≤N≤2*b m – 1.ここで、mが$ \ lfloor \ log
-
C++での変数と実数を使用した配列の初期化
配列は、連続したメモリ位置にある同じタイプの要素のコレクションです。配列の最小アドレスは最初の要素に対応し、最大アドレスは最後の要素に対応します。配列インデックスはzero(0)で始まり、配列のサイズから1を引いたもの(配列サイズ-1)で終わります。 配列は、実数だけでなく変数でも初期化できます。これを実証するプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() { int a = 5; int b = 3; int a