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 pentru vizita pe platforma noastră dedicată Informatică. Sperăm că informațiile oferite v-au fost utile. Dacă aveți întrebări sau aveți nevoie de sprijin suplimentar, vă încurajăm să ne contactați. Revenirea dumneavoastră ne bucură, iar dacă v-a plăcut, nu uitați să adăugați site-ul nostru la favorite!