Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนเกมสูงสุดที่ผู้ชนะเล่นใน C++


คำชี้แจงปัญหา

มีผู้เล่น N คนที่กำลังเล่นทัวร์นาเมนต์อยู่ เราจำเป็นต้องหาจำนวนเกมสูงสุดที่ผู้ชนะสามารถเล่นได้ ในทัวร์นาเมนต์นี้ ผู้เล่นสองคนสามารถเล่นกันเองได้ก็ต่อเมื่อความแตกต่างระหว่างเกมที่เล่นโดยพวกเขาไม่เกินหนึ่งเกม

ตัวอย่าง

หากมีผู้เล่น 3 คน จะต้องแข่ง 2 เกมเพื่อตัดสินผู้ชนะดังนี้ −

เกม – 1:ผู้เล่น 1 กับผู้เล่น 2

เกม - 2:ผู้เล่น 2 กับผู้ชนะจากเกม - 1

อัลกอริทึม

  • เราสามารถแก้ปัญหานี้ได้ด้วยการคำนวณจำนวนผู้เล่นขั้นต่ำที่ต้องการก่อน ผู้ชนะจะได้เล่น x เกม เมื่อคำนวณแล้ว ปัญหาจริงๆ กลับตรงกันข้ามกับสิ่งนี้ ตอนนี้สมมติว่า dp[i] หมายถึงจำนวนผู้เล่นขั้นต่ำที่ต้องการเพื่อให้ผู้ชนะเล่นเกม i
  • เราสามารถเขียนความสัมพันธ์แบบเรียกซ้ำระหว่างค่า dp ได้ เช่น dp[i + 1] =dp[i] + dp[i – 1] เพราะหากรองชนะเลิศได้เล่น (i – 1) และผู้ชนะได้เล่นเกม i และผู้เล่นทุกคนที่พวกเขาเล่นในแมตช์นี้แยกจากกัน เกมทั้งหมดที่เล่นโดยผู้ชนะจะเพิ่มจากผู้เล่นทั้งสองชุดนี้
  • เหนือความสัมพันธ์แบบเรียกซ้ำสามารถเขียนได้เป็น dp[i] =dp[i – 1] + dp[i – 2] ซึ่งเหมือนกับความสัมพันธ์อนุกรมฟีโบนักชี ดังนั้นคำตอบสุดท้ายของเราจะเป็นดัชนีของจำนวนฟีโบนักชีสูงสุด ซึ่งน้อยกว่าหรือเท่ากับจำนวนผู้เล่นที่กำหนดในอินพุต

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int getMaxGamesToDecideWinner(int n) {
   int dp[n];
   dp[0] = 1;
   dp[1] = 2;
   int idx = 2;
   do {
      dp[idx] = dp[idx - 1] + dp[idx - 2];
   } while(dp[idx++] <= n);
      return (idx - 2);
}
int main() {
   int players = 3;
   cout << "Maximum games required to decide winner = " << getMaxGamesToDecideWinner(players) << endl;
   return 0;
}

ผลลัพธ์

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -

Maximum games required to decide winner = 2