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

เกมผลัดกันคี่ที่มีจำนวนเต็มสองตัวใน C++


ในปัญหานี้ เราได้รับค่าจำนวนเต็มสามค่า A , B และ T งานของเราคือสร้างโปรแกรมเพื่อเล่น เกมผลัดกันคี่ที่มีจำนวนเต็มสองจำนวน

ค่าจำนวนเต็มสองค่าคือ :

T หมายถึงจำนวนรอบในเกม
A หมายถึงค่าสำหรับผู้เล่น1
B หมายถึงค่าสำหรับผู้เล่น2

ถ้าค่าของ T เป็นเลขคี่ ค่าของ A จะถูกคูณด้วย 2
ถ้าค่าของ T เป็นคู่ ค่าของ B จะถูกคูณด้วย 2
ต้องหาค่ากลับมาเป็น max(A, B) / min(A, B) ในตอนท้าย

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

ป้อนข้อมูล: A =3, B =4, T =3

ผลลัพธ์: 1

คำอธิบาย:

เทิร์นแรก :T เป็นเลขคี่, A คูณด้วย 2, A =6
เทิร์นที่ 2:T เป็นคู่ B คูณด้วย 2, B =8
เทิร์นที่ 3:T เป็นเลขคี่ A คูณด้วย 2, A =12

A =12 B =4

สูงสุด (A, B) =สูงสุด (12, 4) =12
นาที (A, B) =นาที (12, 4) =4
สูงสุด (A, B) / นาที (A, B) =12/8 =1

แนวทางแก้ไข:

วิธีแก้ปัญหาอย่างง่ายคือการคำนวณค่าของ A และ B หลังจาก T เลี้ยวแล้วคืนค่า max(A, B) / นาที (A, B) นี่เป็นวิธีแก้ปัญหาที่มีประสิทธิภาพโดยการทำซ้ำ T

แต่อาจเป็นวิธีแก้ปัญหาที่มีประสิทธิภาพมากกว่าโดยพิจารณาจากข้อเท็จจริงที่ว่าสำหรับค่า T ที่เท่ากัน ค่าของ A ใหม่คือ N*A และค่าของ B ใหม่คือ N*B

ทำให้ค่าของ max(A, B) / min(A, B) เป็นค่าคงที่ซึ่งเท่ากับ
สูงสุด (A, B) / นาที (A, B)

หากค่าของ T เป็นเลขคี่ ค่าของ A จะเป็น 2*N*A และค่าของ B คือ N*B

ทำให้ค่าของ max(A, B) / min(A, B) เป็นค่าคงที่ซึ่งเท่ากับ max(2A, B) / min(2A, B)

ผลลัพธ์ของปัญหา max(A, B) / min(A, B) =

สูงสุด(A, B) / นาที (A, B) ถ้า T เป็นคู่
สูงสุด (A, B) / นาที (A, B) ถ้า T เป็นเลขคี่

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <iostream>
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));
   return -1;
}

int main() {

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

}

ผลลัพธ์ -

The return value of even odd game is 3