ホームページ  >  記事  >  バックエンド開発  >  ゲーム開始前に子の最小数と最大数を見つける C++ プログラム

ゲーム開始前に子の最小数と最大数を見つける C++ プログラム

WBOY
WBOY転載
2023-08-27 15:21:021202ブラウズ

C++ 程序以找到游戏开始前的最小和最大儿童数量

K 個の要素を含む配列 A があるとします。 N 人のプレイヤーとゲーム マスターがいるゲームを考えてみましょう。このゲームには K ラウンドがあります。ゲームのラウンド i で、ゲーム マスターは A[i] 人の子供がグループを形成することを発表します。残りの子は、可能な限り多くの A[i] 子のグループを形成します。お子様は複数のグループに参加することはできません。グループ内の誰もゲームから離れません。他の人は次のラウンドに進みます。ラウンド中にプレイヤーの損失がない場合もあります。最終的に、ラウンド K が終了し、2 人の子供だけが残り、彼らが勝者と宣言されました。開始する前に、ゲーム内に存在する可能性のある子の最小数と最大数を見つけるか、N が有効な値ではないと判断する必要があります。

したがって、入力が A = [3, 4 , 3, 2] のような場合、出力は [6, 8] になります。これは、ゲームが 6 人の子で開始された場合は続行されるためです。

  • 最初のラウンドでは、6 人がそれぞれ 3 人ずつの 2 つのグループを形成しました

  • ##彼らはそれぞれ 4 人と 2 人の 2 つのグループを形成しました

  • その後、子供 1 人と子供 3 人のグループ、1 人がゲームから退場します

  • その 3 人が 1 と 2 のグループを形成します。 1は出発します。

最後の 2 人の子供が勝者と宣言されました。

手順

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

n := size of A
Define a large array a, l, r, a of size: 100010.
l := 2, r = 2
for initialize i := 1, when i <= n, update (increase i by 1), do:
   a[i] := A[i - 1]
for initialize i := n, when i >= 1, update (decrease i by 1), do:
   x := a[i], L := (l + x - 1)
   if L > R, then:
      return -1, 0
   l := L, r = R + x - 1
return l, r

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

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

void solve(vector<int> A){
   int n = A.size();
   int l, r, a[100010];
   l = 2, r = 2;
   for (int i = 1; i <= n; i++)
      a[i] = A[i - 1];
   for (int i = n; i >= 1; i--){
      int x = a[i], L = (l + x - 1) / x * x, R = r / x * x;
      if (L > R){
         cout << "-1, 0";
      }
      l = L, r = R + x - 1;
   }
   cout << l << ", " << r << endl;
   return;
}
int main(){
   vector<int> A = { 3, 4, 3, 2 };
   solve(A);
}

入力

{ 3, 4, 3, 2 }

出力

6, 8

以上がゲーム開始前に子の最小数と最大数を見つける C++ プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。