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

最大kルピーで購入できるチョコレートの最大数を見つけるためのC++プログラム


n個の要素を持つ配列Aがあり、他の値l、r、およびkがそこにあるとします。アマルはチョコレートを買いたいと思っています。彼は高すぎるチョコレートや安すぎるチョコレートも買わないでしょう。店内にはn種類のチョコレートバーがあり、価格はAで表されています。チョコレートバーは、価格がrより大きい場合は高すぎ、l未満の場合は安すぎます。彼はせいぜいkルピーを使いたいと思っています。彼が購入できるチョコレートの最大量を見つける必要があります。

したがって、入力がA =[1、2、3、4、5、6]のような場合; l =3; r =5; k =10の場合、出力は2になります。これは、3ルピーと4ルピーのチョコレートを7ルピーで購入できるためです。

ステップ

これを解決するには、次の手順に従います-

n := size of A
ans := 0
sort the array A
for initialize i := 0, when i < n, update (increase i by 1), do:
   if A[i] > k, then:
      Come out from the loop
   if A[i] >= l and A[i] <= r, then:
      k := k - A[i]
      (increase ans by 1)
return ans

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;

int solve(vector<int> A, int l, int r, int k) {
   int n = A.size();
   int ans = 0;
   sort(A.begin(), A.end());
   for (int i = 0; i < n; ++i) {
      if (A[i] > k)
         break;
      if (A[i] >= l && A[i] <= r) {
         k -= A[i];
         ++ans;
      }
   }
   return ans;
}
int main() {
   vector<int> A = { 1, 2, 3, 4, 5, 6 };
   int l = 3;
   int r = 5;
   int k = 10;
   cout << solve(A, l, r, k) << endl;
}

入力

{ 1, 2, 3, 4, 5, 6 }, 3, 5, 10

出力

2

  1. グラフから減らすことができるスコアの最大量を見つけるためのC++プログラム

    n個の頂点とm個のエッジを持つ重み付きの無向グラフがあるとします。グラフのスコアは、グラフ内のすべてのエッジの重みの加算として定義されます。エッジの重みは負の値になる可能性があり、それらを削除するとグラフのスコアが増加します。グラフを接続したまま、グラフからエッジを削除して、グラフのスコアを最小にする必要があります。減らすことができるスコアの最大量を見つける必要があります。 グラフは配列edgesで与えられ、各要素は{weight、{vertex1、vertex2}}の形式です。 したがって、入力がn =5、m =6、edges ={{2、{1、2}}、{2、{1、3}}、{1、{2、3}

  2. Pythonで階段を上る方法(最大k回までの最大ステップ数)を見つけるためのプログラム

    n段の階段があり、別の番号kもあるとします。最初は階段0にあり、一度に1、2、または3段の階段を上ることができます。しかし、私たちはせいぜいk回しか3つの階段を上ることができません。次に、階段を上る方法をいくつか見つける必要があります。 したがって、入力がn =5、k =2の場合、階段を上るにはさまざまな方法があるため、出力は13になります- [1、1、1、1、1] [2、1、1、1] [1、2、1、1] [1、1、2、1] [1、1、1、2] [1、2、2] [2、1、2] [2、2、1] [1、1、3] [1、3、1] [3、1、1] [2