Rezolvare completă PbInfo #2709 Excursie2

Cerința

Se organizează o excursie cu n participanți cu numere de ordine unice de la 1 la n pentru care se folosesc 3 mijloace de transport. Să se determine dacă se pot aranja participanții astfel încât suma numerelor de ordine din cele trei mașini să fie aceeași. Dacă este posibilă aranjarea, se vor afișa pe 3 linii numerele de ordine separate prin spații, numerele dintr-o mașină pe câte un rând, altfel se afișează NU.

Date de intrare

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

Date de ieșire

Se vor afișa pe 3 linii numerele de ordine separate prin spații, numerele dintr-o mașină pe câte un rând, altfel se afișează NU.

Restricții și precizări

  • 1 ≤ n ≤ 1001
  • ordinea afișării nu contează atât timp cât ea este corectă.

Exemplu 1:

Intrare

5

Ieșire

5
2 3
1 4

Explicație

Pentru n=5, se pot organiza participanții astfel încât suma numerelor de ordine din fiecare mașină să fie aceeași, 5.

Exemplu 2:

Intrare

7

Ieșire

NU

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 Excursie2:

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

int main()
{
    int n,s,x;
    cin>>n;
    if(n<5 || n*(n+1)%3)
    {
        cout<<"NU";
        return 0;
    }
    if((n-9)%6==0)
        s=10,x=(n-9)/6;
    if((n-8)%6==0)
        s=9,x=(n-8)/6;
    if((n-6)%6==0)
        s=7,x=(n-6)/6;
    if((n-5)%6==0)
        s=6,x=(n-5)/6;

    switch(s)
    {
        case 10: cout<<"1 2 3 4 5 "; break;
        case 9: cout<<"1 2 3 6 "; break;
        case 7: cout<<"3 4 "; break;
        case 6: cout<<"5 "; break;
    }

    for(int i=0;i<x;i++)
        cout<<s+6*i<<" "<<s+5+6*i<<" ";
    cout<<'\n';

    switch(s)
    {
        case 10: cout<<"7 8 "; break;
        case 9: cout<<"5 7 "; break;
        case 7: cout<<"2 5 "; break;
        case 6: cout<<"2 3 "; break;
    }

    for(int i=0;i<x;i++)
        cout<<s+1+6*i<<" "<<s+4+6*i<<" ";
    cout<<'\n';

    switch(s)
    {
        case 10: cout<<"6 9 "; break;
        case 9: cout<<"4 8 "; break;
        case 7: cout<<"1 6 "; break;
        case 6: cout<<"1 4 "; break;
    }

    for(int i=0;i<x;i++)
        cout<<s+2+6*i<<" "<<s+3+6*i<<" ";
    cout<<'\n';
    exit(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 #2709 Excursie2

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2709 Excursie2 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!