Balcon [CAMPION.EDU]

C/C++ este un limbaj multi-paradigmă de nivel mediu, orientat pe obiecte, folosit pe scară largă în industria software datorită echilibrului dintre viteză şi complexitate. Dacă ai nelămuriri în legătură cu acest limbaj sau vrei să ne înveți ceva chiar tu, intră aici.

Balcon [CAMPION.EDU]

Postby jolgau » 25 Nov 2011, 18:01

Recent m-am mai apucat de o problema de pe campion.edu (http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=990) si am dat de o problema .... nu stiu cum sa aranjez elementele unui vector de n * n in forma de spirala....

Pentru rezolvarea problemei m-am gandit in urmatorul fel :

1 . Citim elementele vectorului.
2 . Le sortam ( Bubble Sort ).
3 . Rasturnam elementele vectorului . ( ca sa fie in ordine crescatoare )
4 . Adaugam elementele vectorului intr-o matrice sub forma de spirala.

Problema mea este punctul 4 .... nu stiu cum sa adaug elementele unui vector intr-o matrice sub forma de spirala.

Codul scris pana unde m-am blocat :
  1. #include<iostream>
  2. #include<fstream>
  3. #include<algorithm>
  4. using namespace std;
  5.  
  6. int main()
  7. {    
  8. int n,v[100],a[100][100],i,j,schimb,sch;
  9.  
  10. cin>>n;
  11.  
  12. // CITIRE
  13. for(i=0; i<n*n; i++)
  14.    {
  15.     cout<<"v["<<i+1<<"]=";
  16.     cin>>v[i];
  17.    }
  18.  
  19. //SORTARE
  20.  
  21.   schimb=0;
  22.   for(i=0; i<n*n-1; i++)
  23.      if(v[i] < v[i+1])
  24.        {
  25.        sch=v[i];
  26.        v[i] = v[i+1];
  27.        v[i+1] = sch;
  28.        schimb++;
  29.        }
  30.  
  31. //RASTURNARE
  32. reverse(v,v+(n*n));
  33.  
  34. //ADAUGARE IN MATRICE SUB FORMA DE SPIRALA
  35.  
  36. return 0;    
  37. }
  38.  


Imi puteti da niste sfaturi ca sa pot rezolva punctul 4 varog frumos ?
0,0p / 0 votes
User avatar
jolgau
Bit
 
Joined: 11 Dec 2010
Status: 0

Re: Balcon [CAMPION.EDU]

Postby cata45 » 25 Nov 2011, 20:00

Nu e ceva de explicat. Trebuie sa te gandesti ca parcurgi liniile din ce in ce mai restrans.
De ex daca prima linie are 6 elemente ai asa:
  1.  
  2. x x x x x x
  3.   x x x x
  4.     x x
  5.  

Prima linie este parcursa de la stanga la dreapta de la 1 la 6
A doua linie este parcursa de la stanga la dreapta de la 2 la 5
A III-a linie este parcursa de la stanga la dreapta de la 3 la 4.
Asemanator si pentru celelalte linii si coloane. Dar trebuie sa tii cont ca pe unele le parcurgi de sus in jos si pe altele de jos in sus.

Daca nu intelegi te pot ajuta si cu o implementare. Deci daca ai nevoie de implementare cere-mi-o.
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: Balcon [CAMPION.EDU]

Postby jolgau » 26 Nov 2011, 11:07

Nu ma prea descurc , ma poti ajuta terog?
0,0p / 0 votes
User avatar
jolgau
Bit
 
Joined: 11 Dec 2010
Status: 0

Re: Balcon [CAMPION.EDU]

Postby cata45 » 26 Nov 2011, 11:35

  1. int main()
  2. {
  3.     f>>nr;
  4.     n=nr*nr;
  5.     for(i=1; i<=n; i++) //citesc elementele
  6.         f>>a[i];
  7.    
  8.     for(i=1; i<=n-1; i++)//le ordonez
  9.     {
  10.         for(j=i+1; j<=n; j++)
  11.         {
  12.             if(a[i]>a[j])
  13.             {
  14.                 aux=a[i];
  15.                 a[i]=a[j];
  16.                 a[j]=aux;
  17.             }
  18.         }
  19.     }
  20.    
  21.     if(nr%2==0) //calculez o variabila p in functie de paritatea numarului de linii/coloane
  22.         p=nr/2;
  23.     else
  24.         p=nr/2+1;
  25.     t=1;
  26.     for(k=1; k<=p; k++)
  27.     {
  28.         for(j=k; j<=nr-k+1; j++)//in functie de p parcurg liniile si coloanele
  29.         {
  30.             m[k][j]=a[t];
  31.             t++;
  32.         }
  33.         for(i=k+1; i<=nr-k+1; i++)
  34.         {
  35.             m[i][nr-k+1]=a[t];
  36.             t++;
  37.         }
  38.         for(j=nr-k; j>=k; j--)
  39.         {
  40.             m[nr-k+1][j]=a[t];
  41.             t++;
  42.         }
  43.         for(i=nr-k; i>=k+1 ; i--)
  44.         {
  45.             m[i][k]=a[t];
  46.             t++;
  47.         }
  48.     }
  49.     for(i=1; i<=nr; i++)//afisez matricea
  50.     {
  51.         for(j=1; j<=nr; j++)
  52.             g<<m[i][j]<<" ";
  53.         g<<endl;
  54.     }
  55. }
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: Balcon [CAMPION.EDU]

Postby jolgau » 26 Nov 2011, 12:44

Multumesc , am inteles acum.
0,0p / 0 votes
User avatar
jolgau
Bit
 
Joined: 11 Dec 2010
Status: 0

Re: Balcon [CAMPION.EDU]

Postby cata45 » 26 Nov 2011, 12:55

Iti recomand o problema asemanatoare. Aceasta nu are numar de linii egal cu numar de coloane. Deci trebuie sa calculezi doua valori dupa care sa iti ghidezi parcurgerea. Spor! %%-
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9


Return to C / C++

Who is online

Users browsing this forum: No registered users and 0 guests