👤

pbinfo #1595 daca a facut-o cineva sa posteze rezolvarea, va rog.
Andrei este elev în clasa a V-a și își dorește mult un smartphone. Tatăl său știe de acest lucru și s-a gândit să-i facă o bucurie de ziua lui. Așa că a hotărât să-l ducă într-un magazin de telefoane să-și aleagă unul.

Fiecare telefon este inscripţionat cu un număr ce reprezintă performanţa acestuia. Cu cât numărul este mai mare, cu atât telefonul este mai bun. Andrei l-a dorit pe cel mai performant (cu numărul cel mai mare) dar tatăl lui i l-a cumpărat pe al doilea ca performanță.
Cerinta
Dându-se numărul n de smatphone-uri și performanța fiecăruia, să se determine:

1. Numărul cu care este inscripționat telefonul dorit de Andrei;
2. Numărul cu care este inscripționat telefonul pe care l-a primit Andrei.

Date de intrare
Fișierul de intrare smartphone.in conține pe prima linie un număr natural c (1 sau 2) reprezentând numărul cerinței ce trebuie rezolvată.

A doua linie conține numărul natural n reprezentând numărul de telefoane din magazin.
A treia linie conține n valori naturale distincte, separate prin câte un spaţiu, reprezentând performanțele telefoanelor.

Date de iesire
Fișierul de ieșire smartphone.out va conține pe prima linie un singur număr reprezentând răspunsul la cerința citită din fișierul de intrare.

Restrictii si precizari
1 ≤ n ≤ 10000
1 ≤ x ≤ 2000000000 (x = numărul inscripționat pe telefon)
Pentru c = 1 se va rezolva doar cerința 1. Pentru c = 2 se va rezolva doar cerința 2.

Ex.1
smartphone.in
1
5
12 345 231 29 100
smartphone.out 345
Ex.2
2
5
12 345 231 29 100
smartphone.out 231


Răspuns :

#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bomboane1.in");
ofstream g("bomboane1.out");
int main()
{
int d1, x, y, d=-1, b ,a, n;
int k = 0;
f >> x >> y;
if(x%2==1)
x++;
for(int i=x;i<=y;i+=2)
    {
k = 0;
int d2 = 0;
int m = i;
while(m%2 == 0)
{
    m /= 2;
    d2++;
}
for(d1=1; d1*d1<m; d1+=2)
if(m % d1 == 0)
k +=2;
if(d1 * d1 == m)
k ++;
k *= d2;

if(k>d)
        {
            d = k;
            a = b = i;
            n = 1;
        }
else
if(k == d)
            {
                b = i;
                n++;
            }

}
g << a << ' ' << b << ' ' << n << ' ' << d;


return 0;
}
Ar trebui sa-ti sterg problema. #1595 este problema Bomboane1 la care ai primit un raspuns corect de la Ap53 si nu Smartphone pe care ai scris-o in enunt. Iti ofer o solutie la Smartphone si alta data sa fi mai atent. Succes!
#include <bits/stdc++.h>
using namespace std;
int n, i, maxx, z, x, k, v[10005];
int main()
{
    ifstream f("smartphone.in");
    ofstream g("smartphone.out");
    f >> k >> n;
    for(i = 1; i <= n; i ++)
    {
        f >> v[i];
        if(v[i] > maxx) maxx = v[i];
    }
    if(k == 1) { g << maxx; return 0; }
    for(i = 1; i <= n; i ++)
    {
        if(v[i] != maxx && v[i] > z) z = v[i];
    }
    if(k == 2) g << z;
    f.close();
    g.close();
    return 0;
}