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

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, ]

  1. 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

  2. C++での変数と実数を使用した配列の初期化

    配列は、連続したメモリ位置にある同じタイプの要素のコレクションです。配列の最小アドレスは最初の要素に対応し、最大アドレスは最後の要素に対応します。配列インデックスはzero(0)で始まり、配列のサイズから1を引いたもの(配列サイズ-1)で終わります。 配列は、実数だけでなく変数でも初期化できます。これを実証するプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() {    int a = 5;    int b = 3;    int a