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

รหัส C++ ตรวจสอบเกมเทน้ำมีผู้ชนะทั้งหมดหรือไม่


สมมติว่าเรามีอาร์เรย์ A ที่มีองค์ประกอบ n และมีตัวเลขอื่น s มีแก้วน้ำเปล่าหนึ่งใบและแก้วน้ำเปล่าอีกใบบนโต๊ะ ในเกมมีผู้เล่นไม่กี่คน ในแต่ละการเคลื่อนไหว ผู้เล่นจะหยิบแก้วน้ำเปล่าหนึ่งแก้วแล้วเทน้ำทั้งหมดลงในถ้วย หากเกิน ผู้เล่นจะแพ้ เราต้องเช็คก่อนว่าทั้งหมดจะเป็นผู้ชนะหรือไม่ (ถ้วยจะไม่ล้น) หากเติมหนึ่งเต็มแล้ว ผู้เล่นคนต่อไปจะไม่เล่นท่าของเขา/เธอ นี่คือความจุของถ้วยเปล่าและ A[i] คือปริมาณน้ำที่มีอยู่ในถ้วย ith

ดังนั้น ถ้าอินพุตเป็น A =[3, 1, 3]; s =4 ผลลัพธ์จะเป็น True เพราะผู้เล่นคนแรกและคนที่สอง ถ้วยจะเต็ม สุดท้ายผู้เล่นจะไม่เล่นท่านั้น

ขั้นตอน

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

k := 0
n := size of A
sort the array A
for initialize i := 0, when i < n - 1, update (increase i by 1), do:
   k := k + A[i]
if k > s, then:
   return false
Otherwise
   return true

ตัวอย่าง

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

#include <bits/stdc++.h>
using namespace std;
bool solve(vector<int> A, int s){
   int k = 0;
   int n = A.size();
   sort(A.begin(), A.end());
   for (int i = 0; i < n - 1; i++)
      k += A[i];
   if (k > s)
      return false;
   else
      return true;
}
int main(){
   vector<int> A = { 3, 1, 3 };
   int s = 4;
   cout << solve(A, s) << endl;
}

อินพุต

{ 3, 1, 3 }, 4

ผลลัพธ์

1