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