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

โปรแกรม C++ หาผู้ชนะเกมไพ่


สมมติว่าเรามีตัวเลข n สองอาร์เรย์ A และ B ขนาด k1 และ k2 ตามลำดับ Amal และ Bimalare เล่นเกมไพ่ที่น่าสนใจ มีไพ่ n ใบ เลข 1 ถึง n ในขั้นต้นบัตรจะถูกแจกจ่ายระหว่างพวกเขา เกมดำเนินไปดังนี้:ในแต่ละเทิร์น ผู้เล่นแต่ละคนหยิบไพ่หนึ่งใบ (แล้วแต่ว่าพวกเขาต้องการ) แล้ววางลงบนโต๊ะ เพื่อที่ผู้เล่นอีกคนจะไม่เห็นไพ่ที่พวกเขาเลือก จากนั้นไพ่ทั้งสองใบจะถูกเปิดเผย และผู้เล่นที่มีหมายเลขบัตรมากกว่า จะหยิบไพ่ทั้งสองใบในมือของเขา ไพ่ทุกใบสามารถเล่นได้ไม่จำกัดจำนวนครั้ง เป็นตัวแทนของไพ่ที่ Amal เล่น B หมายถึงไพ่ที่ Bimal เล่น ผู้เล่นจะแพ้ถ้าไม่มีไพ่ เราต้องหาผู้ชนะคนสุดท้าย

ดังนั้นหากอินพุตเป็นเช่น n =5; A =[3, 2]; B =[5, 1, 4] แล้วเอาท์พุตจะเป็น Bimal เพราะในตอนแรกพวกเขากำลังเล่น (3, 5), Bimal หยิบไพ่ทั้งหมด จากนั้นเล่น (3, 1) Amal หยิบไพ่ทั้งสองใบแล้วถ้าพวกเขาเล่น (3 , 4) Bimal รับทั้งหมดแล้วถ้า Amal เล่น 1 Bimal จะนำพวกเขาด้วยการ์ด 5 ดังนั้นจะไม่มีไพ่อยู่ในมือของ Amal

ขั้นตอน

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

d := 0
e := 0
for initialize i := 0, when i < size of A, update (increase i by 1),
do:
   f := A[i]
   if d < f, then:
      d := f
for initialize i := 0, when i < size of A, update (increase i by 1),do:
   f := A[i]
   if e < f, then:
      e := f
if d > e, then:
   return "Amal"
Otherwise
   return "Bimal"

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include<bits/stdc++.h>
using namespace std;
string solve(int n, vector<int> A, vector<int> B){
   int d = 0;
   int e = 0;
   for(int i = 0; i<A.size(); i++){
      int f = A[i];
      if (d < f)
      d = f;
   }
   for(int i = 0; i<A.size(); i++){
      int f = A[i];
      if(e < f)
      e = f;
   }
   if (d > e)
      return "Amal";
   else
      return "Bimal";
}
int main(){
   int n = 5;
   vector<int> A = {3, 2};
   vector<int> B = {5, 1, 4};
   cout << solve(n, A, B) << endl;
}

อินพุต

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

ผลลัพธ์

Bimal