Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/16: Рейтинг темы: голосов - 16, средняя оценка - 4.50
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
1

Случайные четные числа

19.05.2011, 18:06. Просмотров 2977. Ответов 10
Метки нет (Все метки)

"Напишите единственный оператор, который будет печатать случайно выбранное число из набора: 2, 4, 6, 8.
Как это реализовать?

Для начала хотел просто сделать генератор "случайных" чисел от 2 до 8:
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
#include <iostream>
using std::cout;
using std::endl;
 
#include <cstdlib>
using std::rand;
using std::srand;
 
#include <ctime>
using std::time;
 
#include <conio.h>
 
 
int main ()
{ 
     srand (time (0) );
     
     int random = 2 + rand() % 8;
     cout << random;
 
    getch ();
    return 0;
}
но после запуска программа иногда выдаёт число 9. Откуда оно тут взялось?


Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2011, 18:06
Ответы с готовыми решениями:

Вывести четные случайные числа
2 Задача) Сгенерировали 3 целых числа в диапазоне от -15 до 20. вывести четные...

Нужно чтобы случайные числа вставали в конец массива,а не удаляли числа
#include &lt;iostream&gt; using namespace std; void main() { setlocale(LC_ALL,...

Случайные числа
как выполнить генератор случайных чисел генерировал любое число и присваивал...

Случайные числа от -8 к 8
Как можно сделать рандомом числа от -8 к 8, нашел на форуме пример: int...

случайные числа в с++
День добрый . Задание : игра в кубики с компом . Не могу понять как сделать для...

10
Mиxaил
534 / 439 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
19.05.2011, 18:10 2
Это означает,
C++
1
int random = 2 + rand() % 8;
что максимальное генерируемое число будет 7 (от 0 до 7 - это те самые 8 чисел), да еще плюсануть 2, вот и выходит 9...
1
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
19.05.2011, 18:16  [ТС] 3
Аааааа, спасибо!

А как быть с этим:
"Напишите единственный оператор, который будет печатать случайно выбранное число из набора: 2, 4, 6, 8."
?
0
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
19.05.2011, 18:18 4
Цитата Сообщение от vortexx1 Посмотреть сообщение
А как быть с этим:
C++
1
2
3
4
5
6
7
8
9
int my_gen(){
  int arr[4] = {2, 4, 6, 8};
  return arr[rand() % 4];
}
 
int main(){
  srand(time(0));
  std::cout << my_gen();
}
1
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
19.05.2011, 18:19  [ТС] 5
Спасибо, конечно, но как обойтись без массивов?
Я до них не дошёл ещё
0
Mиxaил
534 / 439 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
19.05.2011, 18:23 6
попробуйте так:
C++
1
int random = 2 * (rand() % 4 + 1);
1
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
19.05.2011, 18:25 7
C++
1
2
3
4
5
6
7
int my_gen()
{
  int n;
  if( (n = rand() % 7 + 2) % 2 )
    return ++n;
  return n;
}
1
vortexx1
6 / 6 / 3
Регистрация: 06.03.2011
Сообщений: 269
19.05.2011, 18:26  [ТС] 8
Понял. Спасибо.
0
OstapBender
584 / 523 / 75
Регистрация: 22.03.2011
Сообщений: 1,585
19.05.2011, 18:31 9
ИМХО так проще и понятней. обнулить младший разряд.
C++
1
2
3
4
    srand(time(0));
 
    for (int i=0; i<20; i++)
        std::cout << ((rand()%20)&(~1)) << '\n';
3
easybudda
Модератор
Эксперт CЭксперт С++
10113 / 6019 / 1510
Регистрация: 25.07.2009
Сообщений: 11,407
20.05.2011, 01:45 10
Мы простых путей не ищем!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <math.h>
 
int even(void) { return (2468 / (int)pow(10.0, rand() % 4)) % 10; }
 
int main(void){
    int i;
    
    srand(time(NULL));
    for ( i = 0; i < 10; ++i )
        printf("%d\n", even());
        
    return 0;
}
Добавлено через 1 час 39 минут
марсианский вариант
C
1
int even(void) { return (int)("2468"[rand() % 4] - '0'); }
Добавлено через 5 часов 20 минут
и ещё один
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define even() ("\x2\x4\x6\x8"[rand() % 4])
 
int main(void){
    int i = 10;
    
    srand(time(NULL));
    while ( i-- )
        printf("%d ", even());
    printf("\n");
    
    return 0;
}
2
Kastaneda
Jesus loves me
Эксперт С++
4940 / 3016 / 346
Регистрация: 12.12.2009
Сообщений: 7,612
Записей в блоге: 2
Завершенные тесты: 1
20.05.2011, 11:14 11
Ну раз так, тогда вот еще один "марсианский" вариант:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <ctime>
#include <cstdlib>
int main(){
    srand(time(0));
    for(int i=0;i<10;i++)
        std::cout<<abs(int(int(&i+rand())%10))<<std::endl;
    return 0;
}
0
20.05.2011, 11:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 11:14

случайные числа
подскажите как сформировать двумерный массив случайных чисел в заданном...

Случайные числа от -10 до 10
сижу я значит и не могу вывести случайные числа от -10 до 10! Получается только...

Случайные числа от 1 до 9
Можно так создавать случайные числа от 1 до 9 void main() {...


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

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

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