Rezolvare completă PbInfo #3340 perfect1

Cerința

Se dau n numere naturale. Să se determine cel mai mare număr perfect mai mic sau egal cu 8128 care poate fi scris ca produs al unora dintre numerele date. Un număr natural este perfect dacă dublul său este egal cu suma divizorilor săi.

Date de intrare

Fișierul de intrare perfect1.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.

Date de ieșire

Fișierul de ieșire perfect1.out va conține pe prima linie numărul S, reprezentând cel mai mare număr perfect care poate fi scris ca produs al unora dintre numerele de pe a doua linie a fișierului de intrare sau mesajul NU dacă nu se nu există un asemenea număr.

Restricții și precizări

  • 1 ≤ n ≤ 100
  • numerele de pe a doua linie a fișierului de intrare și numerele perfecte determinate vor fi mai mici decât 8128

Exemplul 1:

perfect1.in

7
2 7 9 2 2 31 2

perfect1.out

496

Explicație

înmultind 2*2*2*31*2 obținem numărul 496 .

Exemplul 2:

perfect1.in

6
2 31 127 2 2 5

perfect1.out

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

#include <fstream>
#include <iostream>
using namespace std;
int f[8200];
int main()
{
    ifstream cin ("perfect1.in");
    ofstream cout ("perfect1.out");
    int n,a;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a;
        f[a]++;
    }
    int ok=0;
    if(f[6]>0)
        ok=6;
    if(f[3]>0 && f[2]>0)
        ok=6;
    if(f[28]>0)
        ok=28;
    if(f[7]>0 && f[4]>0)
        ok=28;
    if(f[7]>0 && f[2]>1)
        ok=28;
    if(f[14]>0 && f[2]>0)
        ok=28;
    if(f[496]>0)
        ok=496;
    if(f[16]>0 && f[31]>0)
        ok=496;
    if(f[8]>0 && f[2]>0 && f[31]>0)
        ok=496;
    if(f[4]>1 && f[31]>0)
        ok=496;
    if(f[4]>0 && f[2]>1 && f[31]>0)
        ok=496;
    if(f[2]>3 && f[31]>0)
        ok=496;
    if(f[8]>0 && f[62]>0)
        ok=496;
    if(f[4]>0 && f[2]>0 && f[62]>0)
        ok=496;
    if(f[2]>2 && f[62]>0)
        ok=496;
    if(f[4]>0 && f[124]>0)
        ok=496;
    if(f[2]>1 && f[124]>0)
        ok=496;
    if(f[2]>0 && f[248]>0)
        ok=496;
    if(f[8128]>0)
        ok=8128;
    if(f[4064]>0 && f[2]>0)
        ok=8128;
    if(f[2032]>0 && f[4]>0)
        ok=8128;
    if(f[2032]>0 && f[2]>1)
        ok=8128;
    if(f[1016]>0 && f[8]>0)
        ok=8128;
    if(f[1016]>0 && f[4]>0 && f[2]>0)
        ok=8128;
    if(f[1016]>0 && f[2]>2)
        ok=8128;
    if(f[508]>0 && f[16]>0)
        ok=8128;
    if(f[508]>0 && f[8]>0 && f[2]>0)
        ok=8128;
    if(f[508]>0 && f[4]>0 && f[2]>1)
        ok=8128;
    if(f[508]>0 && f[2]>3)
        ok=8128;
    if(f[508]>0 && f[4]>1)
        ok=8128;
    if(f[254]>0 && f[32]>0)
        ok=8128;
    if(f[254]>0 && f[16]>0 && f[2]>0)
        ok=8128;
    if(f[254]>0 && f[8]>0 && f[2]>1)
        ok=8128;
    if(f[254]>0 && f[8]>0 && f[4]>0)
        ok=8128;
    if(f[254]>0 && f[4]>0 && f[2]>2)
        ok=8128;
    if(f[254]>0 && f[4]>1 && f[2]>0)
        ok=8128;
    if(f[254]>0 && f[2]>4)
        ok=8128;
    if(f[127]>0 && f[64]>0)
        ok=8128;
    if(f[127]>0 && f[32]>0 && f[2]>0)
        ok=8128;
    if(f[127]>0 && f[16]>0 && f[2]>1)
        ok=8128;
    if(f[127]>0 && f[16]>0 && f[4]>0)
        ok=8128;
    if(f[127]>0 && f[8]>1)
        ok=8128;
    if(f[127]>0 && f[8]>0 && f[4]>0 && f[2]>0)
        ok=8128;
    if(f[127]>0 && f[8]>0 && f[2]>2)
        ok=8128;
    if(f[127]>0 && f[4]>2)
        ok=8128;
    if(f[127]>0 && f[4]>1 && f[2]>1)
        ok=8128;
    if(f[127]>0 && f[4]>0 && f[2]>3)
        ok=8128;
    if(f[127]>0 && f[2]>5)
        ok=8128;
    if(ok==0)
        cout<<"NU";
    else
        cout<<ok;
    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 #3340 perfect1

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