0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
1

Массив случайных неповторяющихся чисел

13.06.2012, 13:58. Показов 11175. Ответов 34
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят работал всю ночь и сейчас голова не пашет! объясните в чем проблема
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
{
                                  n: int a = rand()%20+1;
   {
            for (int j=1; j<10; j++)
            {
                if (mase[j] == a)
                {
                    goto n;
                }
            }
            mase[post]=a;
            cout <<mase[post]<< endl;
                                  post++;
}
post и mase[] - глобальные перменные
и как бы я не страрался все время числа повторяются
по логике вроде все правильно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2012, 13:58
Ответы с готовыми решениями:

Генератор случайных неповторяющихся чисел
Народ помогите! Проблема следующая. Я создал массив и заполнил его числами с помощью rand от -20...

Матрица из случайных неповторяющихся чисел
Здравствуйте! В C++ я новичок (что по-моему и так понятно, иначе этого вопроса бы не было :D)....

Составить функцию, которая возвращает N случайных неповторяющихся целых чисел из диапазона
Помогите плизз Составить функцию, которая возвращает N случайных неповторяющихся целых ...

Сгенерировать массив из N неповторяющихся четных чисел в заданном диапазоне
Создать функцию, которая генерирует массив из N элементов неповторяющихся четными числами в...

34
Чайник
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 14:28 2
А ты написал строчку
C++ (Qt)
1
srand(time(0));
(требует #include <time.h>) - эта штука задает какой параметр для rand (для его корректной работы), точно не скажу
0
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 14:32  [ТС] 3
нет, но это все равно не помогает. Ошибка в логике, где-то надо break поставить или что-то такое, но я хз где, поэтому и прошу помощи
0
Чайник
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 14:37 4
А ты просто не можеш поставить
Цитата Сообщение от aletelegov Посмотреть сообщение
int a = rand()%20+1;
в

Цитата Сообщение от aletelegov Посмотреть сообщение
if (mase[j] == a) {
И нафиг убрать goto - а то поему у тя получается почти бесконечный цикл
0
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 14:41  [ТС] 5
нет бесконечного цикла нет, ибо условие выхода доситгается после проверки 10 чисел
а переставил и все равно фигня
0
Чайник
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 14:46 6
Цитата Сообщение от aletelegov Посмотреть сообщение
ибо условие выхода доситгается после проверки 10 чисел
Да только после каждого goto у тя начинается for сначала
Попробуй переставить
Цитата Сообщение от aletelegov Посмотреть сообщение
int j=1
перед

Цитата Сообщение от aletelegov Посмотреть сообщение
n: int a = rand()%20+1;
0
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 14:53  [ТС] 7
нет все равно
0
Чайник
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 15:06 8
Если я все правильно понял, то вот - все работает норм
C++ (Qt)
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 <time.h>
 
using namespace std;
 
int main()
{
 
  int mase[10],post=0,a;
  
   srand(time(0));
            for (int j=0; j<10; j++)
            {
                if (mase[j] == (a = rand()%20+1)){}
 
            }
            mase[post]=a;
            cout <<mase[post]<< endl;
   post++;
  
  system("PAUSE");  
  return 0;
}
1
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 8
13.06.2012, 15:17  [ТС] 9
во то что надо, спс
0
Чайник
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 15:23 10
Ой, сори, я чото ступил, вот
C++ (Qt)
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
 
  int mase[10],post=0,a;
  srand(time(0));
  a = rand()%20+1;
   
            for (int j=0; j<10; j++)
            {
                if (mase[j] == a)
                {
                    int a = rand()%20+1;
                }
            }
            mase[post]=a;
            cout <<mase[post]<< endl;
                                  post++;
  
  system("PAUSE");  
  return 0;
}
А то вообще
Цитата Сообщение от cactus09 Посмотреть сообщение
if (mase[j] == (a = rand()%20+1)){}
такой бред
0
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 15:46 11
Цитата Сообщение от cactus09 Посмотреть сообщение
C++
1
2
3
4
if (mase[j] == a)
{
 int a = rand()%20+1;
}
По моему лучше заменить на:
C++
1
2
3
4
while (mase[j] == a)
{
int a = rand()%20+1;
}
А то могут быть случаи когда 2 раза сгенериться одинаковое число.

И у Вас нерабоет прога.

Добавлено через 15 минут
Хм, интересное задание буду сидеть думать, для своего развития. Напишу скину код
1
Чайник
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 15:59 12
Цитата Сообщение от Aesonet Посмотреть сообщение
И у Вас нерабоет прога.
Почему не работает??? О_о
Миниатюры
Массив случайных неповторяющихся чисел  
0
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 16:08 13
Ну не так выразился. Она работает, но неправильно. Код должен генерить массив неповторяющихся чисел, а не 1 число
0
Чайник
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 16:33 14
Aesonet, Ну тогда можно так, правда это не спортивно
C++ (Qt)
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
 
  int mase[10],post=0,a;
  srand(time(0));
  a = rand()%20+1;
   
            for (int j=0; j<10;)
            {
             if( mase[j]!=(a = rand()%20+1) &&
             mase[0]!=a && mase[1]!=a &&
             mase[2]!=a  && mase[3]!=a  && 
             mase[4]!=a && mase[5]!=a  && 
             mase[6]!=a  && mase[7]!=a &&  
             mase[8]!=a  && mase[9]!=a){    
              mase[j]=a;
              j++;}
            }
            
            
            for (int post=0; post<10; post++)
            {
            cout <<mase[post]<< endl;
            }
  
  system("PAUSE");  
  return 0;
}
0
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 16:47 15
Да неспортивно, при том, а если массив из 1000 ячеек?
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
#include <iostream>
using namespace std;
int main()
{  int mase[10],a,j,x,y=0;
srand(time(NULL));
for (j=0; j<10; j++)
{
mase[j]=rand()%10+1;
}
for (j=0; j<10; j++) cout <<mase[j]<<"   ";
cout<< endl;
for (j=0;j<10;j++)
{x=1;
while (x==1)
{x=0;
for (int i=j;i<10;i++) {if (mase[j]==mase[i])mase[j]=rand()%10+1; x++;}
for (int i=j;i>=0;i--) {if (mase[j]==mase[i])mase[j]=rand()%10+1; x++;}
if (x==2) break;
}}
 
 
cout<< endl;
for (j=0; j<10; j++) cout <<mase[j]<<"   ";  
 
cout<< endl;
system("PAUSE");  
}
Вот над чем я щас думаю, неполучаеться сделать так чтобы сравнивало в циклах массивы хоть убей. Мб поможешь ?
0
Чайник
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 17:01 16
Aesonet, Придумал как зделать, вот
C++ (Qt)
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int main()
{
  int mass[10];
  bool flag=false;
  srand(time(0));
  
  for(int i=0;i<10;i++){mass[i]=rand()%11;}
  
  while(true){
  flag =true;
   for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
     if(mass[i]==mass[j] && i!=j){
      mass[i] = rand()%11;
      flag = false;
      }
    }
   }
   if(flag){break;}
  }
  
  for(int i=0;i<10;i++){cout<<mass[i]<<" ";}
  cout<<endl;
  system("PAUSE");  
  return 0;
}
Я молодец
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
13.06.2012, 17:16 17
я бы писал сгенеренное параллельно в "рабочий" std::set, и там проверял, есть уже такое число или нет. зачем циклить?
0
24 / 24 / 10
Регистрация: 04.04.2012
Сообщений: 119
13.06.2012, 17:42 18
Ну я с класами неоч пока дружу ток изучаю их... Напишите пример кода с std::set.
cactus09
Наверное жара в офисе на меня так плохо действует, не додумался к такому
0
Чайник
70 / 70 / 9
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 17:45 19
novi4ok,
Цитата Сообщение от Aesonet Посмотреть сообщение
Ну я с класами неоч пока дружу ток изучаю их... Напишите пример кода с std::set.
Поддерживаю, тож интересно и тож с классами не дружу
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
13.06.2012, 18:34 20
Цитата Сообщение от cactus09 Посмотреть сообщение
novi4ok,

Поддерживаю, тож интересно и тож с классами не дружу
а зачем пишешь using namespace std;, если не используешь ничего из этого namespace?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
#include <set>
 
#define ARRAY_SIZE 10
#define RANDOM_RANGE 20 // генерируем числа до 20. должно быть больше, чем длина массива.
                                     // желательно в коде где-нибудь проверить, если задается как параметр
 
...
    int mass[ARRAY_SIZE];
    srand(time(0));
    std::set<int> set;
    int index = 0;
    ::memset (mass, 0, sizeof (mass));
    while (set.size() < ARRAY_SIZE){
        int r = rand()%RANDOM_RANGE+1;
        if (set.find(r) == set.end()){
            set.insert (r);
            *(mass+index++) = r;
        }
    }
1
13.06.2012, 18:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2012, 18:34
Помогаю со студенческими работами здесь

Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел
Преобразовать одномерный массив вещественных случайных чисел в массив целых чисел больших исходных...

Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает
Задание: Нужно вывести массив из случайных чисел. Размер массива 8. Случайные числа от 1 до 8....

Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
Сформировать одномерный массив целых чисел, используя датчик случайных чисел. Удалить 5...

Сформировать одномерный массив целых чисел, используя датчик случайных чисел
1) Сформировать одномерный массив целых чисел, используя датчик случайных чи-сел. 2) Распечатать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru