Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Перестановки в антилексикографическом порядке


Автор: Vampire551 19.5.2008, 20:53
Пожалуйста, помогите дописать прогу. Нужно сделать так чтобы она отбирала только "хорошие" перестановки. "Хорошая" перестановка- это, если разбить ряд на 2 блока,то левая часть должна быть равна или примерно равна правой.Например:ряд-(1 2 3 4),хорошие перестановки-(1 4 2 3),(1 4 3 2),(2 3 1 4), (3 2 1 4), (2 3 4 1), (4 1 3 2 ), (4 1 2 3) вроде все smile. Эти "хорошие" перестановки нужно записывать в массив. Заранее благодарен.
Код

#include <stdio.h>
#include <conio.h>
#include<iostream.h>

#define N 4

void swap(int *a, int *b)
{
  int t;
  t=*a;
  *a=*b;
  *b=t;
}

void reverse(int * P,int m)
{
   int i=0, j=m;
   while(i<j)
   {
     swap(&P[i], &P[j]);
     i++;
     j--;
   }
}

void antilex(int * P,int m)
{
  int i;
  if(m==0)
  {
    for(i=0; i<N; i++)
    printf("%d ",P[i]);
    printf("\n");
  }
  else
  {
    for(i=0; i<=m; i++)
    {
      antilex(P,m-1);
      if(i<m)
      {
    swap(&P[i], &P[m]);
    reverse(P,m-1);
      }
    }
  }
}

void main()
{
  clrscr();
  int i;
  int P[N];
  for(i=0; i<N; i++)
  P[i] = i+1;
  antilex(P,N-1);
  getch();
}

Автор: mes 19.5.2008, 21:28
Цитата(Vampire551 @  19.5.2008,  20:53 Найти цитируемый пост)
Пожалуйста, помогите дописать прогу. 

а чего не получается ? на ошупь искать что то не сильно хочется )) 

Автор: Vampire551 19.5.2008, 21:37
Хех.)) Короче, я не догоняю как это сделать.))

Автор: mes 19.5.2008, 22:02
Цитата(Vampire551 @  19.5.2008,  20:53 Найти цитируемый пост)
Нужно сделать так чтобы она отбирала только "хорошие" перестановки...
Короче, я не догоняю как это сделать.)) 

как понял проблема в том что надо определить хорошая эта перестановка или нет ? 
определи середину ряда. получи сумму всех чисел от начала до середины и от середины до конца (кстати как поступать в случае нечетной длины ряда ?)
и если разность этих сумм равна 0 или малому (по твоему определению) числу то запоминать ..


Автор: Vampire551 20.5.2008, 16:02
Эх. Чет не получается у меня это сделать. Помогите пожалуйста(допишите эту прогу)  smile 

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