Informatică, întrebare adresată de Mihai2628, 8 ani în urmă



Se da n numar natural.

Afisati permutarile circulare la dreapta ale sirului de nr 1,2,...,n folosind liste circulare alocate dinamic.


ex: n = 4


Afiseaza :

1 2 3 4

4 1 2 3

3 4 1 2

2 3 4 1

(In c++)

Răspunsuri la întrebare

Răspuns de AfloareiAndrei
2

Nu le afiseaza in ordinea pusa de tine. Dar sper sa intelegi ideea.

:)

Anexe:
Răspuns de boiustef
1

Răspuns:

#include <iostream>

using namespace std;

struct nod{

   int nr;

   nod *urm;

};

nod *prim=NULL, *ultim=NULL;

void adauga(nod *&prim, nod *&ultm, int num)

{

   nod *p=new nod;

   p->nr=num;

   if (prim==NULL)

   {

       prim=p; ultim=p;

       prim->urm=p; ultim->urm=p;

   }

   else

   {

       p->urm=ultim->urm;

       ultim->urm=p;

       ultim=p;

   }

}

void afisare(nod *prim, nod *ultim)

{

   nod *p=prim;

   do

   {

       cout << p->nr << " ";

       p=p->urm;

   }while (p!=prim);

   cout << "\n";

}

void permutari(nod *prim, nod *ultim, int n)

{

   nod *p, *q;

   int x,a,b;

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

   {

      afisare(prim,ultim);

      x=ultim->nr;

      p=prim; a=p->nr;

      while (p!=ultim)

      {

         q=p;

         p=p->urm; b=p->nr;

         p->nr=a; a=b;

      }

      prim->nr=x;

   }

}

int main()

{

   int n,i;

   cout << "n= "; cin >> n;

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

       adauga(prim,ultim,i);

   cout << "permutarile circulare la dreapta:" << "\n";

   permutari(prim,ultim,n);

}

Explicație:

parcă lucrează bine... :)))

am folosit variabile de lucru:

x - pentru ultim (ca apoi să-l pun pe primul loc)

şi a, b pentru a efectua deplasările spre dreapta

Alte întrebări interesante