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
Nu le afiseaza in ordinea pusa de tine. Dar sper sa intelegi ideea.
:)
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