- +/- sve poruke
- ravni prikaz
- starije poruke gore
Ja bi tu iskoristio simetriju kvadratne matrice, jer prevedeno na logiku kvadratne matrice kraljica ima četiri načina kretanja:
- horizontalno
- vertikalno
- glavna dijagonala
- pomoćna dijagonala
Mogu se uočiti pravilnosti u broju polja dosega za pozicije:
4 X 4
9 9 9 9
9 11 11 9
9 11 11 9
9 9 9 9
5 X 5
12 12 12 12 12
12 14 14 14 12
12 14 16 14 12
12 14 14 14 12
12 12 12 12 12
Iz ovoga je jasno da ne moramo računati svaku pojedinu poziciju, nego jednostavno prelaziti na sve manje kvadrate u kvadratu uz dekrement veličine kvadrata 2, a istovremeno uz inkrement broja polja u dosegu za 2. Kad veličina kvadrata dosegne 0 ili manje, dobili smo ukupan broj polja u dosegu kraljice za sva polja.
#include<iostream>
using namespace std;
double ProsjecanBrojNapadnutihPolja(int dimMatrica)
{
int suma = 0;
int dosegKraljice = (dimMatrica-1)*3;
int dimSubMatrica = dimMatrica;
while(dimSubMatrica>0)
{
if(dimSubMatrica > 1)
{
suma += dosegKraljice * ((dimSubMatrica*dimSubMatrica) - ((dimSubMatrica-2)*(dimSubMatrica-2)));
}
else
{
suma += dosegKraljice;
}
dosegKraljice += 2;
dimSubMatrica -= 2;
}
return suma / (double) (dimMatrica*dimMatrica);
}
int main()
{
int dimMatrica;
cin>> dimMatrica;
cout<< ProsjecanBrojNapadnutihPolja(dimMatrica) << endl;
return 0;
}
Što se tiče one funkcije izračuna broja polja u dosegu za pojedinu poziciju, nju riješiti manipulacijom horizontale, vertikale i glavne i pomoćne dijagonale.
Upravo sam i ja na ovaj nacin krenuo razradjivati program-preko matrice ali sam se na kraju izgubio totalno :)
Hvala jos jednom na pomoci :)
