Informatică, întrebare adresată de blueandredcolours19, 8 ani în urmă

va rog sa ma ajutați la problema aceasta. As vrea si explicație daca se poate!

Cerința

Doi prieteni se afla pe axa Ox, in puncte cu coordonate întregi. Primul se află în punctul x1 = a, iar al doilea se află în punctul x2 = b. Fiecare se poate mișca cu o poziție, la stânga sau la dreapta, de un număr nelimitat de ori. Când se mișcă, oboseala se modifică după următoarea regulă: la prima mișcare oboseala crește cu 1, la a doua mișcare oboseala crește cu 2, la a treia cu 3 și asa mai departe. De exemplu, dacă un prieten se mișcă mai întâi la stânga, apoi la dreapta, și apoi iar la stânga, oboseala lui devine 1 + 2 + 3 = 6.
Prietenii vor să se întâlnească într-un punct cu coordonata număr întreg. Aflați oboseala totală minimă pe care cei doi cei doi o vor acumula.

Date de intrare

Programul citește de la tastatură numerele a si b.

Date de ieșire

Programul va afișa pe ecran numărul S, reprezentând oboseala minimă posibilă acumulată de cei doi prieteni.

Restricții și precizări

1 ≤ a ≤ 1000

1 ≤ b ≤ 1000

a≠b


Exemplu

Intrare
3 4
Ieșire
1

Explicație

Primul prieten face un pas la dreapta (ajungând la punctul b=4), sau al doilea prieten face un pas la stânga (ajungând la punctul a=3). În ambele cazuri, oboseala totala este egală cu 1.

Răspunsuri la întrebare

Răspuns de MrCalibster
3

#include <iostream>

using namespace std;

int main() {

 int a,b,S=0;

 cin>>a;

 cin>>b;

 if(a<b)

 {

   int aux=a;

   a=b;

   b=aux;

 }

 int def=a-b;

 int i=0,ad=1;

 while(def!=0)

 {

   def--;

   S=S+ad;

   i++;

   if(i==2)

   {

     ad++;

     i=0;

   }

 }

 cout<<S;

}

La rezolvare m-am gandit sa aflu prima data diferenta dintre cele doua numere. Dupa care folosesc acel while, care merge pana cand diferenta (care reprezinta numarul de pozitii) ajunge la zero. Daca este diferita de zero atunci unul dintre ei trebuie sa se mute cu o pozitie, si adunam la numarul minim de oboseala ad, adica oboseala pentru aceea mutare. Folosim un contor i, care in cazul in care ajunge la zero inseamna ca fiecare dintre prieteni a realizat mutarea cu oboseala minima, asa ca vom trece la urmatoarea mutare cu oboseala mai mare si vom reface contorul pentru a vedea cand se vor realiza dinou cele doua mutari(una de catre cel din stanga si una de catre cel din dreapta).


blueandredcolours19: mulțumesc enorm de mult!
MrCalibster: Cu placere!
Alte întrebări interesante