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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
#1

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

19.05.2011, 18:06. Просмотров 2304. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Случайные четные числа (C++):

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

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

случайные числа - C++
подскажите как сформировать двумерный массив случайных чисел в заданном диапозоне которые не повторяются

Случайные числа - C++
Подскажите функцию(или класс а вней функцию) для генерирования случайных чисел аналог Random.Next() C#

Случайные числа - C++
Привет, мне надо наполнить массив случайными числами но толька чтоб они не повторялись, подскажыте как ето сделать.

Случайные числа от -8 к 8 - C++
Как можно сделать рандомом числа от -8 к 8, нашел на форуме пример: int r=(rand() % 11) + 5;//от 0 до 10 и +5, то есть от 5 до 15 но...

10
Mиxaил
533 / 438 / 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...
1
vortexx1
6 / 6 / 2
Регистрация: 06.03.2011
Сообщений: 269
19.05.2011, 18:16  [ТС] #3
Аааааа, спасибо!

А как быть с этим:
"Напишите единственный оператор, который будет печатать случайно выбранное число из набора: 2, 4, 6, 8."
?
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 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 / 2
Регистрация: 06.03.2011
Сообщений: 269
19.05.2011, 18:19  [ТС] #5
Спасибо, конечно, но как обойтись без массивов?
Я до них не дошёл ещё
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
19.05.2011, 18:23 #6
попробуйте так:
C++
1
int random = 2 * (rand() % 4 + 1);
1
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 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 / 2
Регистрация: 06.03.2011
Сообщений: 269
19.05.2011, 18:26  [ТС] #8
Понял. Спасибо.
0
OstapBender
584 / 523 / 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';
3
easybudda
Модератор
Эксперт CЭксперт С++
9693 / 5643 / 962
Регистрация: 25.07.2009
Сообщений: 10,847
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
Эксперт С++
4688 / 2892 / 236
Регистрация: 12.12.2009
Сообщений: 7,353
Записей в блоге: 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
Привет! Вот еще темы с ответами:

Случайные числа - C++
void rndChain(){ system(&quot;cls&quot;); SetConsoleTitleA(&quot;dovjina zrost vibirki&quot;); ...

Случайные числа от 1 до 9 - C++
Можно так создавать случайные числа от 1 до 9 void main() { srand(time(0)); for (int i = 0; i&lt;20; i++) { cout &lt;&lt;...

Случайные числа - C++
Всем привет! Мне нужно сгенерировать действительное случайное число в диапазоне от нуля до 1. Читал вот это:...

случайные числа - C++
как заполнить массив случайными числами например от -50 до 50 void generate(int mas,int n){ for(int i=0;i&lt;n;i++) mas=(rand()%50)-50; ...


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

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

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