Răspuns :
Program C++ :
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("nyk.in");
ofstream g("nyk.out");
int fct_cmmdc(int a, int b){
//Functie care returneaza cel mai mare divizor comun al numerelor a si b (Euclid)
int r;
while(b != 0){
r = a % b;
a = b;
b = r;
}
return a;
}
bool prim(int n){
//Functie care returneaza 1 daca n este prim sau 0 altfel.
if(n<2)return 0;
for(int i=2;i<=n/2;i++)
if(n%i==0)return 0;
return 1;
}
int main(){
int i,j,n,m,cmmdc,curent,maxcmmdc=0,nractualcladire=0,maxprimcladire=0;
int strada=0, cladire=0, inaltimecladire=0;
//Citire strazi
f >> n;
for(i=1;i<=n;i++){
//Initializare maxim cladire
maxprimcladire=0;
//Citire cladiri
f >> m;
for(j=1;j<=m;j++){
f >> curent;
//Daca aceasta e prima cladire de pe strada, atribuie valoarea ei cmmdc. Altfel calculeaza cmmdc
if(j==1) cmmdc=curent;
else cmmdc=fct_cmmdc(curent,cmmdc);
//Determina maximul prim de pe strada respectiva, salveaza inaltimea
if(curent>=maxprimcladire && prim(curent)){
maxprimcladire = curent;
nractualcladire = j;
}
}
//Daca cmmdc actual e mai mare decat maximul inlocuieste maxcmmdc, salveaza numarul strazii si al cladirii; si inaltimea cladirii;
if(cmmdc>=maxcmmdc){
maxcmmdc = cmmdc;
strada=i;
cladire = nractualcladire;
inaltimecladire = maxprimcladire;
}
}
//Afisare rezultat
if(inaltimecladire)g << strada << " " << cladire << endl << inaltimecladire;
else cout << "Nu am gasit casa!";
}
Nota :
Pbinfo da doar 80 de puncte pentru aceasta solutie. Cum site-ul nu ofera suficiente detalii despre testele la care programele sunt supuse nu imi pot da seama exact de problema.
Vă mulțumim că ați vizitat site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru întrebări sau asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!