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