首頁  >  文章  >  後端開發  >  C++ 程式以找到遊戲開始前的最小和最大兒童數量

C++ 程式以找到遊戲開始前的最小和最大兒童數量

WBOY
WBOY轉載
2023-08-27 15:21:021234瀏覽

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

假設我們有一個包含 K 個元素的陣列 A。考慮一下,在一場遊戲中,有 N 個玩家,並且有一個遊戲主持人。這個遊戲有K輪。在第 i 輪遊戲中,遊戲主持人宣布將 A[i] 個孩子組成小組。然後剩下的孩子組成盡可能多的 A[i] 孩子組。一個孩子不能參加多個小組。沒有組的人離開遊戲。其他人進入下一輪。一輪可能沒有玩家損失。最終,第K輪結束後,只剩下兩個孩子,他們被宣佈為獲勝者。我們必須在開始之前找到遊戲中可能存在的最小和最大的孩子數量,或者確定 N 不存在有效值。

因此,如果輸入類似於A = [3, 4 , 3, 2],那麼輸出將是[6, 8],因為如果遊戲以6 個孩子開始,那麼它會繼續

  • 在第1 輪中,其中6人組成兩組,每組3人

  • 他們組成兩組,分別有4個和2個孩子

  • 然後一組1 個孩子和3 個孩子,1 個將離開遊戲

  • 他們三個組成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中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除