Rezolvare completă PbInfo #2748 patrula3

Cerința

Un domeniu pătrat (cu albastru), ca cel din figură trebuie apărat. Domeniul e împărțit în pătrățele. Latura domeniului este de n pătrățele, n≥7. Pe culoarele colorate patrulează 3 soldați, care încep patrularea din colțul stânga sus în același moment (poziția inițială). În exemplul de mai jos avem n=9.
Cei 3 soldați (garda) se vor schimba cu alți 3 soldați în momentul în care ajung în poziția inițială, simultan.
Soldații patrulează în sensul acelor de ceasornic fiecare cu aceeași viteză constantă, și fiecare pe culoarul său.
Să se scrie un program care determină numărul de circuite complete pentru fiecare soldat (un circuit complet este făcut de un soldat oarecare, pe același culoar până ajunge în poziția inițială), pentru schimbarea gărzii.
S1 patrulează pe culoarul galben, S2 pe gri, S3 pe roșu. Albastrul este cetatea care trebuie apărată.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran numerele c1, c2 și c3 reprezentând numărul de circuite complete pe care le face fiecare soldat.

Restricții și precizări

  • 7 ≤ n ≤ 1000

Exemplu

Intrare

9

Ieșire

3 4 6

Explicație

Primul soldat face 3 ture complete, al doilea 4, iar cel de-al treilea 6.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema patrula3:

#include <iostream>
using namespace std;

int main()
{
    long long n,x,y,z,a,b,c;
    cin>>n;
    //calculez numarul de pasi pt fiecare culoar
    x=n*4-4;
    y=(n-2)*4-4;
    z=(n-4)*4-4;
    //calculez cmmdc si cmmmc pt primele 2
    a=x; b=y;
    while(b)
    {
        long long r=a%b;
        a=b;
        b=r;
    }
    c=x*y/a;
    //calculez cmmdc si cmmmc si cu al treilea
    a=c; b=z;
    while(b)
    {
        long long r=a%b;
        a=b;
        b=r;
    }
    c=c*z/a;// => c e nr de pasi pe care trebuie sa il faca fiecare pana la intalnire
    //impart pe c la numarul de pasi de pe fiecare culoar
    cout<<c/x<<" "<<c/y<<" "<<c/z;
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2748 patrula3

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2748 patrula3 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!