Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

회의 후 피로를 최소화하는 C++ 코드

<시간/>

두 개의 숫자와 b가 있다고 가정합니다. 두 친구가 OX 축에서 x =a 및 x =b 위치에 있습니다. 각 친구는 라인을 따라 원하는 방향으로 무제한으로 이동할 수 있습니다. 이동하면 친구의 피로가 다음 규칙에 따라 변경됩니다. 첫 번째 이동은 피로도가 1 증가하고 두 번째 이동은 피로도가 2 증가하는 식입니다. 그들 중 두 명은 OX 축에서 하나의 정수 점을 만나고 싶어합니다. 우리는 그들이 얻을 수 있는 최소한의 총 피로도를 찾아야 합니다.

따라서 입력이 =5와 같으면; b =10이면 최적의 방법 중 하나가 다음과 같기 때문에 출력은 9가 됩니다. 첫 번째 친구는 ​​오른쪽으로 세 걸음, 두 번째 친구는 ​​왼쪽으로 두 걸음 이동해야 합니다. 따라서 총 피로도는 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