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

โค้ด C++ หาความเหนื่อยล้าต่ำสุดหลังเพื่อนสองคนพบกัน

สมมติว่าเรามีตัวเลขสองจำนวน a และ b สองเพื่อนอยู่ที่ตำแหน่ง x = a และ x = b บนแกน OX แต่ละคนสามารถเคลื่อนที่ได้ทีละหน่วยในทิศทางใดก็ได้ไม่จำกัดจำนวนครั้ง การเคลื่อนที่ทำให้ความเหนื่อยล้าตามกฎ: ครั้งแรกเพิ่ม 1 ครั้งที่สองเพิ่ม 2 ต่อไป พวกเขาต้องการพบกันที่จุดจำนวนเต็มบนแกน OX เราต้องหาความเหนื่อยล้ารวมต่ำสุด

เช่น ถ้าอินพุตคือ a = 5; b = 10 เอาต์พุตจะเป็น 9 เพราะวิธีที่ดีที่สุดคือ เพื่อนคนแรกเดิน 3 ก้าวไปขวา เพื่อนคนที่สองเดิน 2 ก้าวไปซ้าย ความเหนื่อยล้ารวม = 1+2+3+1+2 = 9

ขั้นตอนการแก้ปัญหา

ans := |a - b|
sum := ans / 2
return (sum + (ans mod 2)) * (sum + 1)

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

int solve(int a, int b) {
    int ans = abs(a - b);
    int sum = ans / 2;
    return (sum + (ans % 2)) * (sum + 1);
}

int main() {
    int a = 5;
    int b = 10;
    cout << solve(a, b) << endl;
}

อินพุต

5, 10

เอาต์พุต

9