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

รหัส C++ หาเวลารวมในการดึงกล่องโดย Rabbit


สมมติว่าเรามีสองพิกัด (x1, y1) และ (x2, y2) กระต่ายกำลังดึงกล่องอาหาร เขาติดด้วยเชือกที่มีขนาดเพียง 1 ยูนิตเท่านั้น แรบบิทจะดึงกล่องไปยังตำแหน่งที่มันยืนอยู่ก่อนจะเคลื่อนที่ออกไปในทิศทางเดียวกัน 1 หน่วย กระต่ายสามารถเคลื่อนตัวไปทางขวา ซ้าย ขึ้น หรือลงได้ 1 หน่วย โดยไม่ต้องดึงกล่อง ในกรณีนี้ไม่จำเป็นต้องอยู่ห่างจากกล่องเพียง 1 หน่วย ถ้าเขาต้องการดึงกล่องอีกครั้ง มันต้องไปที่จุดข้างกล่อง แรบบิทเริ่มได้ทุกเมื่อ ใช้เวลา 1 วินาทีในการเดินทาง 1 หน่วยในทุกทิศทาง เราต้องหาเวลาขั้นต่ำที่ต้องการย้ายกล่องจากตำแหน่งเริ่มต้นไปยังตำแหน่งสิ้นสุด

ดังนั้น ถ้าอินพุตเป็น x1 =1; y1 =1; x2 =2; y2 =2 จากนั้นผลลัพธ์จะเป็น 4 เนื่องจาก Rabbit สามารถเริ่มต้นที่จุด (2,1) มันดึงกล่องไปที่ (2,1) ขณะที่อยู่ใน (3,1) จากนั้นย้ายไปที่ (3,2) แล้วไปที่ (2,2) โดยไม่ต้องดึงกล่อง จากนั้นดึงกล่องไปที่ (2,2) ขณะเคลื่อนที่ไปที่ (2,3) ใช้เวลา 4 วินาที

ขั้นตอน

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

s := 0
if x1 is not equal to x2 and y1 is not equal to y2, then:
   s := |x2 - x1| + |y2 - y1|
Otherwise
   s := |x2 - x1| + |y2 - y1|
return s

ตัวอย่าง

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

#include <bits/stdc++.h>
using namespace std;
int solve(int x1, int y1, int x2, int y2){
   int s = 0;
   if (x1 != x2 && y1 != y2)
      s = abs(x2 - x1) + abs(y2 - y1) + 2;
   else
      s = abs(x2 - x1) + abs(y2 - y1);
   return s;
}
int main(){
   int x1 = 1;
   int y1 = 1;
   int x2 = 2;
   int y2 = 2;
   cout << solve(x1, y1, x2, y2) << endl;
}

อินพุต

1, 1, 2, 2

ผลลัพธ์

4