Форум программистов, компьютерный форум CyberForum.ru

Игнорирование элемента массива - C++

Восстановить пароль Регистрация
 
vitik
 Аватар для vitik
10 / 10 / 1
Регистрация: 05.01.2011
Сообщений: 152
28.07.2012, 20:19     Игнорирование элемента массива #1
Уважаемые опытные никак не могу додуматься как сделать чтобы при следующем выводе случайного числа с массива , предыдущее не рассматривалось. Как выбрасывать игральные карты с колоды пока не останется одна .
В этом примере выводиться одно число с массива, как сделать чтобы при повторном использовании вывода это число игнорировалось?
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
38
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
 
using namespace std;
 
void printRandDigit();
int main()
 
printRandDigit();
 
    getch();
        return 0;
    }
 
void printRandDigit()
{
    srand(time(NULL));
    int arr[10]=
    {
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19
    };
 
    int a = arr[1] + rand()%9;
 
 
    cout<<a<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2012, 20:19     Игнорирование элемента массива
Посмотрите здесь:

Из массива A удалить те цепочки нечетных элементов, в которых нет ни одного элемента из массива B C++
C++ Вычислить количество элементов массива целых M [15] больших квадрата первого элемента этого массива
Заменить значение пятого элемента нового массива средним арифметическим исходного массива C++
Найти номер элемента массива У, ближайшего по значению к наименьшему элементу массива Х. C++
C++ Заменить каждый неположительный элемент массива Х абсолютной величиной элемента массива Y с тем же индексом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.07.2012, 20:34     Игнорирование элемента массива #2
да способов много, но проще взять любой подходящий контейнер из STL и записывать/удалять оттуда элементы
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.07.2012, 21:15     Игнорирование элемента массива #3
Например, так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define N 10
#include<time.h>
int main()
{
   int a[N] = {10, 10, 11, 12, 13, 14, 14, 15, 16, 17};
   int ind[N], i, j, buf;
   srand(time(NULL));
   for(i = 0; i < N; i++)
      ind[i] = i;
   for(i = 0; i < N; i++)
   {
       j = i + rand()%(N - i);
       buf = ind[i]; ind[i] = ind[j]; ind[j] = buf;
       printf("%d ", a[ind[i]]);
   }
   return 0;
}
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
28.07.2012, 21:27     Игнорирование элемента массива #4
Цитата Сообщение от Thinker Посмотреть сообщение
Например, так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define N 10
#include<time.h>
int main()
{
   int a[N] = {10, 10, 11, 12, 13, 14, 14, 15, 16, 17};
   int ind[N], i, j, buf;
   srand(time(NULL));
   for(i = 0; i < N; i++)
      ind[i] = i;
   for(i = 0; i < N; i++)
   {
       j = i + rand()%(N - i);
       buf = ind[i]; ind[i] = ind[j]; ind[j] = buf;
       printf("%d ", a[ind[i]]);
   }
   return 0;
}
Обычно только второй цикл пишут так, чтобы он шёл от конца к началу (чуть проще выглядит):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define N 10
#include<time.h>
int main()
{
   int a[N] = {10, 10, 11, 12, 13, 14, 14, 15, 16, 17};
   int ind[N], i, j, buf;
   srand(time(NULL));
   for(i = 0; i < N; i++)
      ind[i] = i;
   for(i = N - 1; i >= 0; i--)
   {
       j = rand()%i;
       buf = ind[i]; ind[i] = ind[j]; ind[j] = buf;
       printf("%d ", a[ind[i]]);
   }
   return 0;
}
Это классический алгоритм Кнута для случайной перестановки элементов массива.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.07.2012, 21:31     Игнорирование элемента массива #5
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Обычно только второй цикл пишут так

Не по теме:

Ну, можно так, что в голову пришло, то и написал, Кнутов, к сожалению, не читали)

OhMyGodSoLong
28.07.2012, 21:35
  #6

Не по теме:

Главное — принцип: точка разделения массива двигается от одного конца к другому, по одну сторону от неё остаток исходного массива, по другую — строящаяся случайная перестановка элементов, которые берутся из исходной стороны.

Thinker
28.07.2012, 21:39
  #7

Не по теме:

это понятно все. главное понимать, что так мы можем взять из массива a произвольное количество элементов http://www.cyberforum.ru/cgi-bin/latex.cgi?\leq N

vitik
 Аватар для vitik
10 / 10 / 1
Регистрация: 05.01.2011
Сообщений: 152
28.07.2012, 21:49  [ТС]     Игнорирование элемента массива #8
Thinker если не сложно можно прокомментировать как в циклах так получилось, сразу не могу вехать.
Thinker
28.07.2012, 21:56
  #9

Не по теме:

думаю, что в посте #6 очень понятно все написано, прочитайте внимательно

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2012, 22:02     Игнорирование элемента массива
Еще ссылки по теме:

Определить номера минимального элемента массива и элемента, являющегося минимальным без учета этого элемента. C++
C++ Вставить после каждого нечетного элемента массива максимальный простой элемент этого же массива
C++ Вставить два элемента по 1000, начиная с четвертого элемента исходного массива, сдвигая его элементы

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

Или воспользуйтесь поиском по форуму:
vitik
 Аватар для vitik
10 / 10 / 1
Регистрация: 05.01.2011
Сообщений: 152
28.07.2012, 22:02  [ТС]     Игнорирование элемента массива #10
Огромное спасибо .
Yandex
Объявления
28.07.2012, 22:02     Игнорирование элемента массива
Ответ Создать тему
Опции темы

Текущее время: 04:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru