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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
19.05.2011, 18:06     Случайные четные числа #1
"Напишите единственный оператор, который будет печатать случайно выбранное число из набора: 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. Откуда оно тут взялось?


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

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

А как быть с этим:
"Напишите единственный оператор, который будет печатать случайно выбранное число из набора: 2, 4, 6, 8."
?
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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();
}
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
19.05.2011, 18:19  [ТС]     Случайные четные числа #5
Спасибо, конечно, но как обойтись без массивов?
Я до них не дошёл ещё
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
19.05.2011, 18:23     Случайные четные числа #6
попробуйте так:
C++
1
int random = 2 * (rand() % 4 + 1);
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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;
}
vortexx1
 Аватар для vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
19.05.2011, 18:26  [ТС]     Случайные четные числа #8
Понял. Спасибо.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 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';
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 11:14     Случайные четные числа
Еще ссылки по теме:

C++ Случайные числа
Случайные числа от 1 до 9 C++
C++ Случайные числа

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 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;
}
Yandex
Объявления
20.05.2011, 11:14     Случайные четные числа
Ответ Создать тему
Опции темы

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