AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.09.2008, 18:02   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Не, программку не осилил.
Вот есть вариант, авторство не мое (код на С++):
X++:
#include <algorithm>
#include <iostream>
using namespace std;

int A[20];
int n = 4;

int main()
{
      int nf = 1;
      int i,j;


      for(i = 2; i <= n; ++i) nf *= i;

      for(i = 0; i < n; ++i) A[i] = i + 1;

      for(i = 0; i < nf; ++i)
      {
            for(j = 0; j < n; ++j) cout<<A[j];
            cout<<endl;
            int jp = 0;
            for(j = 0; j < n - 1; ++j) if (A[j] < A[j+1]) jp = j;
            int tp = 0;
            for(j = n - 1; j >= 0; --j) if (A[j] > A[jp]) { tp = j; break; }
            swap(A[jp], A[tp]);
            for(j = 0; j < (n - jp) / 2; ++j) swap(A[jp + 1 + j], A[n - 1 - j]);
      }
}
Единственное, что я не уверен, можно ли несколько вложенных циклов иметь уровня вложенности = 1..
Старый 15.09.2008, 18:07   #2  
Dozer is offline
Dozer
Участник
AxAssist
Соотечественники
 
107 / 24 (1) +++
Регистрация: 16.11.2004
Адрес: г. Калгари, Канада
Хм. Я не совсем понял как у вас получилось 1/2?
Я рассуждал таким образом что если даже первый пассажир самовольно занимает любое место, то остальные пассажиры занимают места по возможности согласно билету, следовательно единственный пассажир который займет не своё место это тот, чьё место займёт первый пассажир. Следовательно последний не займет своё место только в одном случае из 71.
Где я не прав?
__________________
С уважением, Dozer
Старый 15.09.2008, 18:43   #3  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Не, программку не осилил.
Вот есть вариант, авторство не мое (код на С++):
X++:
#include <algorithm>
#include <iostream>
using namespace std;

int A[20];
int n = 4;

int main()
{
      int nf = 1;
      int i,j;


      for(i = 2; i <= n; ++i) nf *= i;

      for(i = 0; i < n; ++i) A[i] = i + 1;

      for(i = 0; i < nf; ++i)
      {
            for(j = 0; j < n; ++j) cout<<A[j];
            cout<<endl;
            int jp = 0;
            for(j = 0; j < n - 1; ++j) if (A[j] < A[j+1]) jp = j;
            int tp = 0;
            for(j = n - 1; j >= 0; --j) if (A[j] > A[jp]) { tp = j; break; }
            swap(A[jp], A[tp]);
            for(j = 0; j < (n - jp) / 2; ++j) swap(A[jp + 1 + j], A[n - 1 - j]);
      }
}
Единственное, что я не уверен, можно ли несколько вложенных циклов иметь уровня вложенности = 1..
Хм.. вот вроде бы эквивалент на X++

X++:
static void Google(Args _args)
{

    int     A[20];
    int     n = 4;
    int     nf = 1;
    int     i,j;
    int     jp = 0;
    str     line;
    int     tp = 0;

    anyType buffer;

    ;

    // Расчет факториала (количество возможных значений)
    for (i = 2; i <= n; i++)
        nf = nf * i;

    // Генерация массива
    for(i = 1; i <= n; i++)
        A[i] = i;

    // перебор всех возможных значений
    for(i = 1; i <= nf; i++)
    {
        line = '';
        for (j = 1; j <= n; j++ )
        {
            line = line + int2str(A[j]);
        }
        info(line);

        jp = 1;
        for(j = 1; j <= (n - 1); j++)
        {
            if (A[j] < A[j+1]) 
                jp = j;
        }

        tp = 1;
        for(j = n; j >= 1; j--)
        {
            if (A[j] > A[jp]) 
            { 
                tp = j; 
                break; 
            }
        }

        // swap
        buffer  = A[jp];
        A[jp]   = A[tp];
        A[tp]   = buffer;

        for(j = 1; j <= ( (n - jp)/2 ); j++)
        {
            // swap
            buffer = A[jp + 1 + j];
            A[jp + 1 + j] = A[n - 1 - j];
            A[n - 1 - j] = buffer;
        }
    }
}
Че-то не работает ...
Старый 15.09.2008, 22:44   #4  
gigz is offline
gigz
Участник
MCBMSS
Соотечественники
 
19 / 43 (2) +++
Регистрация: 15.09.2008
Цитата:
Сообщение от CDR Посмотреть сообщение
Хм.. вот вроде бы эквивалент на X++

X++:
static void Google(Args _args)
{
 
    int     A[20];
    int     n = 4;
    int     nf = 1;
    int     i,j;
    int     jp = 0;
    str     line;
    int     tp = 0;
 
    anyType buffer;
 
    ;
 
    // Расчет факториала (количество возможных значений)
    for (i = 2; i <= n; i++)
        nf = nf * i;
 
    // Генерация массива
    for(i = 1; i <= n; i++)
        A[i] = i;
 
    // перебор всех возможных значений
    for(i = 1; i <= nf; i++)
    {
        line = '';
        for (j = 1; j <= n; j++ )
        {
            line = line + int2str(A[j]);
        }
        info(line);
 
        jp = 1;
        for(j = 1; j <= (n - 1); j++)
        {
            if (A[j] < A[j+1]) 
                jp = j;
        }
 
        tp = 1;
        for(j = n; j >= 1; j--)
        {
            if (A[j] > A[jp]) 
            { 
                tp = j; 
                break; 
            }
        }
 
        // swap
        buffer  = A[jp];
        A[jp]   = A[tp];
        A[tp]   = buffer;
 
        for(j = 1; j <= ( (n - jp)/2 ); j++)
        {
            // swap
            buffer = A[jp + 1 + j];
            A[jp + 1 + j] = A[n - 1 - j];
            A[n - 1 - j] = buffer;
        }
    }
}
Че-то не работает ...
1) в последнем цикле появилась куча ошибок с индексами
Теги
логические задачи

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
ARIS-задачи itfs Курилка 9 02.11.2006 12:35
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:47.