Alex are o pasiune pentru trasul la țintă. Jucându-se cu numere, visează la o nouă tablă pentru pasiunea sa. Tabla visată este de formă pătrată cu n
linii și n
coloane, iar numerele, de la 1
la n * n
, le poziționează în țintă, ca în imaginea alăturată.
Alex, fiind un foarte bun țintaș, nu nimerește niciodată pe pătrățelele de pe contur. Când țintește o pătrățică din interior, el obține drept punctaj suma valorilor din cele opt pătrățele vecine.
Cerinţă
Cunoscând n numărul de linii și de coloane ale țintei:
a. Ajutați-l pe Alex să construiască ținta visată.
b. Câte punctaje distincte poate să obțină Alex dacă are o singură săgeată?
c. Afișați punctajele distincte găsite.
Date de intrare
Fișierul de intrare tinta.in
conține pe prima linie numărul natural n
, indicând numărul de linii și de coloane ale țintei.
Date de ieșire
Fișierul de ieșire tinta.out
va conține pe primele n
linii câte n
numere naturale, separate prin câte un spațiu, reprezentând numerele de pe cele n
linii ale țintei. Pe linia n+1
se va afișa un singur număr p
reprezentând numărul de punctaje distincte. Pe linia n+2
se vor afișa p
numere naturale separate prin câte un spațiu și ordonate strict crescător, reprezentând punctajele distincte.
Restricții și precizări
3 ≤ n ≤ 1000
- Pentru prima cerinţă afişată corect se va acorda 40% din punctaj; pentru a doua cerință se va acorda 20% din punctaj; pentru cea de-a treia cerință se va acorda 40% din punctaj.
Exemplul 1
tinta.in
3
tinta.out
1 2 6 3 5 7 4 8 9 1 40
Explicație
Alex poate ținti doar în pătrățelul interior (cel pe care avem 5
), deci obține un singur punctaj, iar suma este 40
.
Exemplul 2
tinta.in
4
tinta.out
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16 3 45 68 91
Explicație
Alex poate ținti doar pătrăţelele 5
, 8
, 9
sau 12
.
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 Tinta:
#include <cstdio>
#include<time.h>
int n,i,j,k,u,v,x,y,a[4][1001],b[1001][4],s;
int main()
{
freopen("tinta.in","r",stdin);
freopen("tinta.out","w",stdout);
scanf("%d",&n); // citesc datele de intrare
// generez matricea
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(i+j<=n+1)
{
if((i+j)%2==0) k=(i+j-1)*(i+j-2)/2+j;
else k=(i+j-1)*(i+j-2)/2+i;
}
else
{
u=n+1-i;
v=n+1-j;
if((i+j)%2==0) k=n*n+1-(u+v-1)*(u+v-2)/2-v;
else k=n*n+1-(u+v-1)*(u+v-2)/2-u;
}
printf("%d ",k);
if(i<=3 ) a[i][j]=k;
if(j>=n-2 ) b[i][n+1-j]=k;
}
printf("
");
}
printf("%d
",2*(n-2)-1);
for(j=2;j<n;j++)
{ s=0;
for(i=1;i<=3;i++)
for(k=j-1;k<=j+1;k++)
s+=a[i][k];
printf("%d ",s-a[2][j]);}
for(i=3;i<n;i++)
{s=0;
for(j=1;j<=3;j++)
for(k=i-1;k<=i+1;k++)
s+=b[k][j];
printf("%d ",s-b[i][2]);
}
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 .
Rezolvarea problemei #1129 Tinta
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1129 Tinta 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!