👤

Să se insereze în șir înaintea fiecărui element pătrat perfect rădăcina sa pătrată..

De ce este gresit acest algoritm ?

#include

#include

using namespace std;

int v[31],i,x,n,j,;

int main()

{cin>>n;

for(i=1;i<=n;i++)

cin>>v[i];

i=1;

while(i<=n)

{x=v[i];

if(x==(int)sqrt(x)*(int)sqrt(x))

{for(j=n;j>=i-1;j--)

v[j+1]=v[j];

v[i-1]=(int)sqrt(x);

n++;

i=i+2;}

else i++;}

for(i=1;i<=n;i++) cout<return 0;

}


Răspuns :

cand verifici daca numarul este patrat perfect, in if ai v[i-1]= radacina dar v[i-1] nu ne intereseaza, tu l-ai mutat pe v[i] in v[i+1] astfel incat sa-i faci loc lui sqrt(x) in v[i], pozitia imediat anterioara.

inlocuieste v[i-1]=sqrt(x); cu v[i]=sqrt(x); si e ok (int(sqrt) e irelevant deoarece stii deja ca e patrat deci radacina e intreaga)

daca ai peste 15 numere in vector s-ar putea sa depasesti dimensiunea (daca sunt toate patrate, dar asta se rezolva daca declari vectorul de 100 sau macar de 50).

also in declararea variabilelor ai o virgula intre j si ";", scapa de ea ca da eroare.