Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++|Pascal] Перестановки


Автор: Acrobat 4.12.2007, 05:50
Всем привет, мне нужно найти все перестановки в лексическом порядке. На Паскале сделал, а на 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;
}

 буду благодарен за любую помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)