Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Dmitry Pankov                        2:5022/58.27   01 Oct 2001  17:24:58
 To : Evgeniy Jirnov
 Subject : Все перестановки...
 -------------------------------------------------------------------------------- 
 
 
 29 сентября 2001 года (а было тогда 09:56)
 Evgeniy Jirnov в своем письме к All писал:
 
  EJ> Есть несколько чисел, хочется получить сабж этих чисел:
  EJ> Hапример: 1,2,3(n=3)
  EJ> Все перестановки(n!):
  EJ> 1,2,3
  EJ> 1,3,2
  EJ> 2,1,3
  EJ> 2,3,1
  EJ> 3,1,2
  EJ> 3,2,1
 
 Вроде оно...
 
 ======== Hачало permutat.cpp ========
 /*
    Программа  оперирует  с массивом a[1]..a[n], в  котором  хранится
 перестановка  чисел  1..n.  Рекурсивная процедура  generate  в такой
 ситуации печатает все перестановки, которые  на  первых  t  позициях
 совпадают с перестановкой a; по выходе из нее переменные t и a имеют
 те же значения, что и до входа.
 */
 
 #include <conio.h>
 #include <stdio.h>
 #define MAX 30
 
 typedef int vector[MAX]; // объявление нового типа
 
 void generate(int n, int t, vector a)
 {
   int i,j; // счетчики циклов
   int k; // временная переменная
 
   if(t==n) {
     for(i=1;i<=n;i++) printf("%d",a[i]);
     printf("\n");
   }
   else { // t<n
     for(j=t+1;j<=n;j++) {
       k=a[t+1]; a[t+1]=a[j]; a[j]=k; // поменять местами a[t+1] и a[j]
       generate(n,t+1,a); // рекурсивный вызов
       k=a[t+1]; a[t+1]=a[j]; a[j]=k; // поменять местами a[t+1] и a[j]
     }
   }
 }
 
 void main()
 {
   int i; // чсетчик цикла
   int n; // количество элементов массива
   vector a; // массив с числами
 
   clrscr();
   printf("Введите кол-во чисел не больше %d: ",MAX);
   scanf("%d",&n);
   // составление массива с числами
   for(i=1;i<=n;i++) {
     printf("Введите %d число: ",i);
     scanf("%d",&a[i]);
   }
   printf("\nПерестановки:\n");
   // запуск рекурсивной функции печати перестановок
   generate(n,0,a);
   puts("\nДля продолжения нажмите любую клавишу . . .");
   getch();
 }
 ======== Конец permutat.cpp ========
 С наилучшими пожеланиями, Dmitry                  *e-mail: panda@tula.net*
 
  .  Тишина
 ... Хорошую информaцию трудно добыть. Сделaть с ней что-нибудь - еще труднее
 --- Win95 UpTime: 00d 02h 39m
  * Origin: Рабочий день сокращает жизнь на 8 часов (2:5022/58.27)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Все перестановки...   Evgeniy Jirnov   29 Sep 2001 09:56:30 
 Все перестановки...   Vladimir Namkhoev   01 Oct 2001 13:23:01 
 Все перестановки...   Alexander Topolskiy   06 Oct 2001 03:19:03 
 Все перестановки...   Stanislav Shwartsman   06 Oct 2001 09:56:01 
 Все перестановки...   Alexander Topolskiy   10 Oct 2001 02:11:24 
 Все перестановки...   Stanislav Shwartsman   10 Oct 2001 07:05:59 
 Все перестановки...   Vladimir Namkhoev   06 Oct 2001 23:03:19 
 RE:Все перестановки...   Mihail Vetchinoff   07 Oct 2001 01:13:46 
 Все пеpестановки...   Alexander Hritonenkov   07 Oct 2001 20:44:30 
 Все пеpестановки...   George Shepelev   08 Oct 2001 11:07:26 
 Все перестановки...   Alexander Topolskiy   10 Oct 2001 02:12:36 
 Re: Все пеpестановки...   Alexander Veprik   12 Oct 2001 14:14:11 
 Все пеpестановки...   Stanislav Shwartsman   14 Oct 2001 07:05:40 
 Re: Все пеpестановки...   Alexander Veprik   15 Oct 2001 07:13:19 
 Re: Все пеpестановки...   Alexander Veprik   07 Oct 2001 01:41:47 
 Все перестановки...   Dmitry Pankov   01 Oct 2001 17:24:58 
Архивное /ru.algorithms/33783bb8a71b.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional