Пожалуйста, помогите дописать прогу. Нужно сделать так чтобы она отбирала только "хорошие" перестановки. "Хорошая" перестановка- это, если разбить ряд на 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) вроде все . Эти "хорошие" перестановки нужно записывать в массив. Заранее благодарен.
| Код | #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(); }
|
|