Unde e gresala in acest program?
#include
using namespace std;
ifstream in("memory004.in");
ofstream out("memory004.out");
const int N=1101;
int m,n,a;
int LSNPIC[N]; // LMSC=Lungime Secventa Numere Prime Inceput Coloana;
int LSNPSC[N]; // LMSC=Lungime Secventa Numere Prime Sfarsit Coloana;
int LI[N]; // LI=1 sau 0 (1 daca am calculat deja lungimea de inceput de coloana)
bool prim[10001]; // Ciurul lui Eratostene
int main()
{
prim[0]=prim[1]=1; // 0 si 1 nu-s prime
for(int i=2;i*i<=10000; ++i)
if(prim[i]==0)
for(int j=2;i*j<=10001;++j)
prim[i*j]=1; // Sunt marcate cu 0 cele prime si cu 1 cele ce nu-s prime
/*
La citirea elementelor matricei se afla secventele de numere prime pe fiecare coloana,
retinand maximul lungimilor acestora.
De asemenea, se retin intr-un sir lungimile secventelor de numere prime de la inceputul fiecarei coloane.
Aceste lungimi se vor aduna cu lungimile secventelor de la sfarsitul coloanei precedente fiecarei coloane,
sumele obtinute fiind de asemenea comparate cu maximul.
*/
in>>m>>n; // Citim dimensiunile matricii
for(int i=0;i
for(int j=0;j
{
in>>a;
if(!prim[a]&&LI[j]==0) // Memorez lungimea la inceputul coloanei
LSNPIC[j]++;
else
LI[j]=1;
if(!prim[a]) // Memorez lungimea la sfarsitul coloanei
LSNPSC[j]++;
else
LSNPSC[j]=0;
}
int L=LSNPSC[0],LMAX=0; // L=lungimea unei secvente, LMAX=lungimea maxima a secventei de nr. prime
for(int j=1;j<=n;j++)
{
L+=LSNPIC[j];
if(L>LMAX&&LSNPIC[j]!=m)
LMAX=L,L=LSNPSC[j];
}
if(L>LMAX)
LMAX=L;
out<
return 0;
}
E vornba de problema #1495 Memory004 de pe pbinfo.ro care are urmatorul enunt:
Se dă o matrice cu m linii şi n coloane, având elementele numere naturale nenule. Parcurgând matricea pe coloane de sus în jos şi de la stânga la dreapta, determinaţi lungimea maximă a unei secvenţe de numere prime.
Date de intrare
Fișierul de intrare memory004.in conține pe prima linie numerele m şi n, iar pe următoarele m linii câte n numere naturale, separate prin spații, reprezentând elementele matricei.
Date de ieșire
Fișierul de ieșire memory004.out va conține pe prima linie numărul L, reprezentând lungimea maximă a unei secvenţe de numere prime din matrice obţinută prin parcurgerea matricei pe coloane, de sus în jos şi de la stânga la dreapta.
Restricții și precizări
2 ≤ m , n ≤ 1000
elementele matricei sunt numere naturale mai mici decât 10.000
Exemplu
memory004.in
3 4
1 6 5 11
2 4 3 9
2 4 7 8
memory004.out
4
Explicație
Se dă o matrice cu 3 linii şi 4 coloane. Parcurgând matricea pe coloane de sus în jos şi de la stânga la dreapta se obţin secvenţele de numere prime, puse în evidenţă cu ajutorul culorilor, în matricea de mai jos:
1 6 5 11
2 4 3 9
2 4 7 8
Secvenţele de numere prime sunt 2,2 şi 5,3,7,11, lungimea maximă fiind 4.
alexandrastan93:
Nu e #include<iostream>?
Răspunsuri la întrebare
Răspuns de
4
consider ca te complici prea mult incercand sa nu folosesti matrice, cel mai bibe ar fii sa-o construiesti, poti sa folosesti chiar boolean pentru a crea una ce utilizeaza mai putina memorie.
Construiesti matricea si pui 1 la cele prime, 0 la celelaltr; apoi o reparcurgi , insa de data aceasta mergi pe coloane si iei sirul care-l gasesti cel mai lung.
CODUL(pentru citit si cautat sirul cel mai lung):
in >>n>>m;
bool matrice [1000][1000];
for (int i=0;i <m;i++)
for (int j=0;j <n;j++)
{
in>>a;
if (!prim [a])
matricr [i][j] = 1;
else
matrice[i][j] = 0 ;
}
int max=0,numara=0;
for (int j=0;j <n;j++)
for (int i=0;i <m;i++)
{
if (matrice [i][j] == 1)
numara++;
else
numara =0;
if (numara >max)
max = numara;
}
out << max;
Sper ca te ajuta, daca ai intrebari, nu ezita sa intrebi; bafta. :)
Construiesti matricea si pui 1 la cele prime, 0 la celelaltr; apoi o reparcurgi , insa de data aceasta mergi pe coloane si iei sirul care-l gasesti cel mai lung.
CODUL(pentru citit si cautat sirul cel mai lung):
in >>n>>m;
bool matrice [1000][1000];
for (int i=0;i <m;i++)
for (int j=0;j <n;j++)
{
in>>a;
if (!prim [a])
matricr [i][j] = 1;
else
matrice[i][j] = 0 ;
}
int max=0,numara=0;
for (int j=0;j <n;j++)
for (int i=0;i <m;i++)
{
if (matrice [i][j] == 1)
numara++;
else
numara =0;
if (numara >max)
max = numara;
}
out << max;
Sper ca te ajuta, daca ai intrebari, nu ezita sa intrebi; bafta. :)
La citirea elementelor matricei se află secvenţele de numere prime pe fiecare coloană, reţinând maximul lungimilor acestora. De asemenea, se reţin într-un şir lungimile secvenţelor de numere prime de la începutul fiecărei coloane. Aceste lungimi se vor aduna cu lungimile secvenţelor de la sfârşitul coloanei precedente fiecărei coloane, sumele obţinute fiind de asemenea comparate cu maximul.
Alte întrebări interesante
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Engleza,
9 ani în urmă
Limba română,
9 ani în urmă