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


Автор: Ufyljy 2.12.2007, 14:36
Следующая задача.
Есть набор чисел: 1,2,3,4,5,6,7,8,9
И в цикле они меняются местами. Могут последовательно (ну а могут случайно).
При этом они не должны повторяться.

 smile 

Автор: Alek86 2.12.2007, 14:47
используй std::next_permutation

если нужно решение в виде программы, попроси переместить тему в Центр Помощи

Автор: Ufyljy 2.12.2007, 23:08
Уважаемые администрации, пожалуйста переместите тему в центр помощи!

Автор: MAKCim 4.12.2007, 02:32
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: orthrus 4.12.2007, 07:16
Код

#include <iostream>
#include <iterator>
#include <algorithm>

int main (int argc, char* argv[])
{
    int A[9] = { 1,2,3,4,5,6,7,8,9};
    
    do
    {
       std::copy(A,A + (sizeof(A)/sizeof(A[0])),std::ostream_iterator<int>(std::cout," "));
       std::cout << std::endl;
    }
    while (std::next_permutation(A,A + (sizeof(A)/sizeof(A[0]))));
    return 0;
}

Автор: zkv 4.12.2007, 18:56
orthrus, неплохо, только для читаемости я бы sizeof(A)/sizeof(A[0]) к определению массива бы вынес:
Код

#include <iostream>
#include <iterator>
#include <algorithm>
int main (int argc, char* argv[])
{
    int A[] = { 1,2,3,4,5,6,7,8,9};
    const int size = sizeof(A)/sizeof(A[0]);

    do
    {
       std::copy( A, A + size, std::ostream_iterator<int>(std::cout," ") );
       std::cout << '\n';//в цикле лучше так, потому что endl каждый раз сбрасывает буфер 
    }
    while (std::next_permutation( A, A + size ) );
    return 0;
}

Автор: Ufyljy 5.12.2007, 18:22
А можно как-то попроще написать.
Я ваши std еще пока не знаю. Можно ли это как-то реализовать в цикле (знаете, как там сортировка по возрастанию).

Или это анреал?

Добавлено через 7 минут и 14 секунд
Сейчас скомпилировал ваши исходные коды.
Наверно, я не так поставил задачу. При каждом запуске программы должно выдаваться 9 чисел, но расположены они по-разному каждый раз

1 2 3 4 5 6 7 8 9
2 9 3 4 1 5 7 8 6

и.т.д. 

Автор: Dov 5.12.2007, 22:13
Цитата(Ufyljy @  5.12.2007,  17:22 Найти цитируемый пост)
При каждом запуске программы должно выдаваться 9 чисел, но расположены они по-разному каждый раз

Тогда так:
Код

#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <time.h>

int main(int argc, char* argv[])
{
    srand((unsigned)time(NULL));

    int A[]  = {1,2,3,4,5,6,7,8,9};
    int size = sizeof(A) / sizeof(A[0]);
    
    std::random_shuffle(A, A + size);
    for(int j = 0; j < size; j++)
        std::cout << A[j] << ' ';
    std::cout << std::endl;
    
    return 0;    
}


Автор: Dov 5.12.2007, 23:02
Цитата(Ufyljy @  5.12.2007,  17:22 Найти цитируемый пост)
А можно как-то попроще написать.Я ваши std еще пока не знаю. Можно ли это как-то реализовать в цикле

Можно и так, почему нет? Например:
Код
#include <iostream.h>
#include <stdlib.h> 
#include <time.h>

int main(int argc, char* argv[])
{
    srand((unsigned)time(NULL));
    
    int A[]  = {1,2,3,4,5,6,7,8,9};
    int size = sizeof(A) / sizeof(A[0]);    
    int i, j, temp;
    
    for (i = 0; i < size; i++)
    {
        j = rand() % size;
        temp = A[i];
        A[i] = A[j];
        A[j] = temp;
    }
    
    for(i = 0; i < size; i++)
        cout << A[i] << ' ';
    cout << endl;
    
    return 0;
}
 

Автор: Ufyljy 8.12.2007, 23:36
Спасибо всем ответившим  smile 

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