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

พลังชีวิตสุดท้ายขั้นต่ำที่เป็นไปได้ของสัตว์ประหลาดตัวสุดท้ายในเกมใน C++


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

ให้มอนสเตอร์ N ตัว มอนสเตอร์แต่ละตัวมีพลังชีวิตเริ่มต้น h[i] ซึ่งเป็นจำนวนเต็ม สัตว์ประหลาดจะมีชีวิตอยู่หากพลังชีวิตของมันมากกว่า 0

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

ตัวอย่าง

หากอาร์เรย์อินพุตเป็น {2, 14, 28, 56} เอาต์พุตจะเป็น 2 เพราะเมื่อมีมอนสเตอร์ตัวแรกเท่านั้นที่โจมตีมอนสเตอร์ 3 ตัวที่เหลือ พลังชีวิตของมอนสเตอร์ตัวสุดท้ายจะเป็น 2 ซึ่งน้อยที่สุด

อัลกอริทึม

เราสามารถรับคำตอบสุดท้ายโดยใช้สูตร GCD ด้านล่าง -

H(นาที) =gcd(h1, h2, …, hn)

ตัวอย่าง

#include <iostream>
using namespace std;
int gcd(int a, int b) {
   if (a == 0)
   return b;
   return gcd(b % a, a);
}
int getPossibleHealth(int* health, int n) {
   int currentGcd = gcd(health[0], health[1]);
   for (int i = 2; i < n; ++i) {
      currentGcd = gcd(currentGcd, health[i]);
   }
   return currentGcd;
}
int main() {
   int health[] = { 4, 6, 8, 12 };
   int n = sizeof(health) / sizeof(health[0]);
   cout << "Possible final health = " << getPossibleHealth(health, n) << endl;
   return 0;
}

ผลลัพธ์

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

Possible final health = 2