Всем привет, мне нужно найти все перестановки в лексическом порядке. На Паскале сделал, а на C++ не могу:( А мне надо именно на C++ Вот код: Паскаль:
| Код | Uses WinCrt; Type Mass=Array[0..10] Of Integer; Type Mass2=Array[0..10] Of char; Var I,J,H,N,K: Integer; A: Mass; M: Mass2; Procedure OutputPer; Var I: Integer; Begin For I:=1 To N Do Write(A[I], ' '); WriteLn; end; BEGIN Write('Количество элементов перестановки: '); Readln(N); For I:=1 To N Do A[I]:=I; WriteLn('Перестановки: '); Repeat OutputPer; { вывод текущей перестановки } I:=N; While A[I-1]>A[I] Do Dec(I); { поиск скачка } J:=I-1; H:=A[J]; While A[I+1]>H Do Inc(I); { поиск первого меньшего элемента } A[J]:=A[I]; A[I]:=H; I:=J+1; K:=N; H:=A[I]; A[I]:=A[K]; A[K]:=H; Inc(I); Dec(K); Until J=0; END.
|
И то, что получилось на С++.net
| Код | #include "stdafx.h" using namespace System; int getint(String^ str) { return Convert::ToInt32(str); } void OutputP(int Count) { int *M; int P[3][6]; int i,j,h,k,d; M = new int [Count]; for(i=0;i<Count;i++) M[i]=i+1; d=0; do { for(i=0;i<Count;i++) P[i][d]=M[i]; i=Count; while(M[i-1]>M[i]) i--; j=i-1; h=M[j]; while(M[i+1]>h) i++; M[j]=M[i]; M[i]=h; i=j+1; k=Count; h=M[i]; M[i]=M[k]; M[k]=h; i++; k--; d++; } while(j=0); for(j=0;j<6;j++) { for(i=0;i<Count;i++) { Console::Write(P[i][j]); Console::Write(" "); } Console::WriteLine(); } Console::WriteLine(); }
int main(array<System::String ^> ^args) { String^ Count; Console::Write("Количество элементов: "); Count = Console::ReadLine(); OutputP(getint(Count)); return 0; }
|
буду благодарен за любую помощь. |