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

Even-Odd Turn Game กับสองจำนวนเต็มใน C++

โจทย์

ได้รับ A, B, T ทางเราเล่นเกม T รอบ:

  • รอบที่เลขคี่: A = A * 2
  • รอบที่เลขคู่: B = B * 2

หาค่า max(A, B) / min(A, B) หลังจบเกม

ตัวอย่าง

Input: A=3, B=4, T=3

Output: 1

อธิบาย: รอบ1: A=6, รอบ2: B=8, รอบ3: A=12 -> max=12, min=4 -> 12/4=3 (โค้ดตัวอย่างมีข้อผิดพลาด ผลลัพธ์ควรเป็น 3)

แนวทางแก้ปัญหา (O(1))

สังเกตรูปแบบ:

  • ถ้า T คู่: A และ B คูณ 2 เท่ากัน -> อัตราส่วนไม่เปลี่ยน = max(A,B)/min(A,B)
  • ถ้า T คี่: A คูณ 2 เพิ่มอีกครั้ง -> อัตราส่วน = max(2A,B)/min(2A,B)

โปรแกรมตัวอย่าง

#include <iostream>
#include <algorithm>
using namespace std;

int EvenOddGame(int A, int B, int T) {
    if (T % 2 == 0) return max(A, B) / min(A, B);
    else return max(2*A, B) / min(2*A, B);
}

int main() {
    int A = 3, B = 2, T = 3;
    cout << "The return value of even odd game is " << EvenOddGame(A, B, T);
    return 0;
}

ผลลัพธ์

The return value of even odd game is 3