Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
id3dx9
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 6
#1

Массив из рандомов - C++

06.09.2012, 09:46. Просмотров 811. Ответов 14
Метки нет (Все метки)

Существует массив, его нужно заполнить рандомными цифрами от 1 до 36, так, чтобы цифры не повторялись: сам дошел до вот такого:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "iostream"
#include "cstdio"
#include "cstdlib"
 
using namespace std;
 
int main()
{
    int nCards[36];
    int nBuffer;
    for(int i=0;i<36;i++)
    {
          
            nBuffer = rand() % 36;
            cout << nBuffer << endl;
            
            for(int a=0;a<36;a++)
        {
            if (nBuffer != nCards[a])
            {
                nCards[i] = nBuffer;
                break;
            }
        }
 
    }
        
        for(int k = 0; k<36; k++)
        {
            cout << nCards[k] << ", ";
        }
                
         
         system ("PAUSE");
         return 0;
}
проблема в том, что числа внутри массива повторяются, то есть
C++
1
2
3
4
5
6
7
8
for(int a=0;a<36;a++)
        {
            if (nBuffer != nCards[a])
            {
                nCards[i] = nBuffer;
                break;
            }
        }
задуманное изначально как проверка на наличие такого числа в массиве, не работает.

подтолкните в правильном направлении
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 09:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив из рандомов (C++):

Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y - QBasic
Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y. ...

Сформировать массив, который будет состоять из чисел, входящих как в массив A, так и в массив B - C (СИ)
Задание: На основе исходных массивов A и B (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел,...

Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C - Pascal
Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C.

Дан массив целых чисел а(12). Переписать в массив х четные, а в массив у нечетные элементы массива а - Turbo Pascal
Помогите пожалуйста решить эту задачу. Массив a выводит на печать. Я пишу a mod 2 = 0 , а он мне 41 ошибку выдает. Что делать? Вот...

Массив: Отсортировать полученный массив 3 способами: по строкам, по столбцам( возр.), 3) и весь массив - Delphi
Помогите, пожалуйста ,решить задачу. Очень нужно. Задан массив (4*6). Элементы задаются по правилу: если j&gt;3, то Aij=i+j, иначе...

Массив: Как сделать так, чтобы результирующий массив представлял собой измененный по заданным правилам первый массив? - C++ Builder
Доброй ночи форумчане, очередной нубо-вопрос не требует отлагательств имеется одномерный массив, из которого по заданным условиям...

14
Пaтрик
416 / 391 / 39
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
06.09.2012, 09:54 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main()
{
   int nCards[36];
   for(int i = 0; i < 36; i++) 
      nCards[i] = i + 1;
   std::random_shuffle(std::begin(nCards), std::end(nCards));  
   std::copy(std::begin(nCards), std::end(nCards), std::ostream_iterator<int>(std::cout, " "));
}
link
2
zitxbit
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
06.09.2012, 10:05 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "iostream"
#include "cstdio"
#include "cstdlib"
 
using namespace std;
 
int main()
{
    int nCards[36];
    int nBuffer;
    int i = 0;
    while (i < 36)    
    {
          
            nBuffer = rand() % 36;
            cout << nBuffer << endl;
            
            bool exists = false;
            for(int a=0;a<36 && !exists;a++)
                 exists = (nBuffer == nCards[a]) ? 1 : 0;
          
            if (exists == false)
            {
                nCards[i] = nBuffer;
                i++;            
            }
     }
        
        for(int k = 0; k<36; k++)
        {
            cout << nCards[k] << ", ";
        }
                
         
         system ("PAUSE");
         return 0;
}
2
Пaтрик
416 / 391 / 39
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
06.09.2012, 10:08 #4
zitxbit, я даже боюсь представить сколько итераций будет у вас сделано
1
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,240
06.09.2012, 10:10 #5
Цитата Сообщение от id3dx9 Посмотреть сообщение
Существует массив, его нужно заполнить рандомными цифрами от 1 до 36
при помощи вспомогательного массива
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bool arrBool[36];
int arrInt[36];
int tmp;
for(int i=0;i<36;i++)
   arrBool[i]=false;
 
for(int i=0;i<36;i++)
{
    tmp= rand() % 36;
    
    while(arrBool[tmp])
           tmp= rand() % 36;
 
   arrBool[tmp]=true;
   arrInt[i]=tmp;
}
1
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
06.09.2012, 10:22 #6
Вспомогательный массив не нужен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdlib>
#include <ctime>
 
const int N = 36;
 
int main()
{
  srand(time(NULL));
 
  int array[N];
  for (int i = 0; i < N; ++i) {
    array[i] = i + 1;
  }
  
  for (int i = N; i > 0; --i) {
    std::swap(array[i - 1], array[rand() % i]);
  }
  
  for (int i = 0; i < N; ++i) {
    std::cout << array[i] << " ";
  }
}
2
PSIAlt
87 / 87 / 8
Регистрация: 19.06.2012
Сообщений: 245
06.09.2012, 10:30 #7
Цитата Сообщение от Пaтрик Посмотреть сообщение
..
Я бы сказал STL-way даже так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <algorithm>
#include <iterator>
 
struct c_unique {
  int current;
  c_unique() {current=0;}
  int operator()() {return ++current;}
};
 
int main()
{
   int nCards[36];
   c_unique UniqueNumber;
   std::generate(std::begin(nCards), std::end(nCards), UniqueNumber);
   std::random_shuffle(std::begin(nCards), std::end(nCards));  
   std::copy(std::begin(nCards), std::end(nCards), std::ostream_iterator<int>(std::cout, " "));
}
1
OhMyGodSoLong
06.09.2012, 10:39
  #8

Не по теме:

std::generate(std::begin(nCards), std::end(nCards), [](int &&n){ return [&](){ return ++n; }; }(0));
^^

1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
06.09.2012, 10:40 #9
Move это конечно круто, но с примитивными типами - бессмысленно. Логичнее лямбду тогда mutable сделать.
1
Пaтрик
416 / 391 / 39
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
06.09.2012, 10:42 #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
 
#include <boost/numeric/ublas/storage.hpp>
 
int main()
{
    using namespace boost::numeric::ublas;
    range rng(1, 37);
    std::vector<int> vec(rng.begin(), rng.end());
    std::random_shuffle(vec.begin(), vec.end());
    std::copy(vec.begin(), vec.end(),
        std::ostream_iterator<int>(std::cout, " "));
}
link
1
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
06.09.2012, 10:43 #11
Цитата Сообщение от ForEveR Посмотреть сообщение
Move это конечно круто, но с примитивными типами - бессмысленно. Логичнее лямбду тогда mutable сделать.
Я просто не знаю знал, как там это делать
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
06.09.2012, 10:51 #12
~OhMyGodSoLong~, Че-нибудь типа

C++
1
2
3
4
   std::generate(std::begin(array), std::end(array), [](int p) mutable
   {
      return [p]() mutable { return ++p; };
   }(0));
http://liveworkspace.org/code/2a23b3686fa7d627213237308f30a489
Хотя я сравнил эти два подхода и с move мне нравится больше пожалуй
1
id3dx9
0 / 0 / 0
Регистрация: 31.08.2012
Сообщений: 6
06.09.2012, 22:15  [ТС] #13
Народ, спасибо всем)
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,240
06.09.2012, 22:24 #14
Цитата Сообщение от id3dx9 Посмотреть сообщение
Народ, спасибо всем)
для спасибы кнопка есть
1
MegaMux
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 1
08.05.2014, 09:39 #15
Достаточно эффективно!
0
08.05.2014, 09:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2014, 09:39
Привет! Вот еще темы с ответами:

Вывести массив а(i, j), одномерный массив b(i) и полученный массив АВ с помощью функции Cells - VBA
Задача 1 Написать программу для решения следующей задачи: для числа n вводимого с клавиатуры (с помощью функции InputBox())...

Массив. Разделить на два: массив элементов с четными и массив с нечетными индексами - Pascal ABC
VII.Одномерные массивы 50. Задан массив с количеством элементов N. Сформировать два массива: в первый включить элементы исходного массива...

Построить массив d из элементов, которые входят как в массив a так и в массив b - C (СИ)
Дан массив a и b состоящий из n элементов. Построить массив d из элементов, которые входят как в массив a так и в массив b. Желательно с...

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию&quot;Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.