Назад
Зміст
Вперед
Задачі з випадковими числами
Приклад 1
Одержати у програмі 10 випадкових цілих чисел у діапазоні від 0 до 10 включно та знайти їх суму.
Змінні:
Вхідних даних немає.
Вихідні:
- x – число, що має значення від 0 до 10 (ціле число)
- s – сума всіх чисел x
Проміжні:
- i – параметр циклу (ціле число)
Програма генерації випадкових чисел та обчислення їх суми
#include <iostream>
using namespace std;
#include <cstdlib>
#include <ctime>
int main()
{
// Ініціалізація генератора випадкових чисел
srand(time(0)); // Використання поточного часу як seed
int i, x, s = 0; // i - лічильник, x - випадкове число, s - сума
// Генерація 10 випадкових чисел
for (i = 1; i <= 10; i++)
{
x = rand() % 11; // Генерація числа від 0 до 10
cout << x << " "; // Виведення числа
s += x; // Додавання до суми
}
// Виведення суми
cout << "\ns=" << s;
return 0;
}
Пояснення роботи програми:
- Ініціалізація генератора:
srand(time(0)) - ініціалізує генератор випадкових чисел, використовуючи поточний час
- Без цього при кожному запуску програма генерувала б однакові послідовності чисел
- Генерація чисел:
rand() % 11 - генерує числа від 0 до 10
- Оператор
% (ділення з остачею) обмежує діапазон
- Виведення результатів:
- Програма виводить 10 згенерованих чисел через пробіл
- Після цього виводить суму всіх згенерованих чисел
Тестування роботи програми:
Вихід:
3 7 2 8 5 10 1 4 6 9
s=55
Числа будуть різними при кожному запуску програми.
Додаткові примітки:
- Функція
rand() генерує псевдовипадкові числа від 0 до RAND_MAX
- Для отримання чисел у конкретному діапазоні використовуйте оператор
%
- У сучасному C++ (C++11 і новіших) рекомендується використовувати бібліотеку
<random>
Приклад 2
Одержати у програмі k випадкових цілих чисел у діапазоні від A до B включно та знайти серед них найменше.
Числа A(5<=A<=20 ), B(25<=B<=75) та k(10<=k<=100) одержати випадковим чином.
Змінні:
Вхідних даних немає.
Вихідні:
- А, В – значення кордонів діапазону [А, В], з якого будемо одержувати випадкові числа (цілі числа)
- x – випадкове число, що має значення від А до В (ціле число)
- k – кількість випадкових чисел (ціле число)
- m – найменше число (ціле число)
Проміжні:
- i – параметр циклу (ціле число)
Програма
Програма генерації випадкових чисел та пошуку мінімуму
#include <iostream>
using namespace std;
#include <cstdlib>
#include <ctime>
int main()
{
// Ініціалізація генератора випадкових чисел
srand(time(0));
int i, x, a, b, k, m;
// Генерація випадкових параметрів:
k = 10 + rand() % 91; // k у діапазоні 10-100 (10 + 0..90)
cout << "k=" << k << endl;
a = 5 + rand() % 16; // a у діапазоні 5-20 (5 + 0..15)
cout << "a=" << a << endl;
b = 25 + rand() % 51; // b у діапазоні 25-75 (25 + 0..50)
cout << "b=" << b << endl;
// Генерація k чисел у діапазоні [a, b]
for (i = 1; i <= k; i++)
{
x = a + rand() % (b - a + 1); // Випадкове число від a до b включно
cout << x << " ";
// Пошук мінімального числа
if (i == 1 || x < m) {
m = x;
}
}
// Виведення мінімального значення
cout << "min=" << m << endl;
return 0;
}
Пояснення роботи програми:
- Ініціалізація генератора:
srand(time(0)) - ініціалізує генератор випадкових чисел
- Використовує поточний час для отримання різних послідовностей при кожному запуску
- Генерація параметрів:
k - кількість чисел (10-100)
a - нижня межа діапазону (5-20)
b - верхня межа діапазону (25-75)
- Генерація чисел:
a + rand() % (b - a + 1) - формула для отримання чисел у діапазоні [a, b]
- Виводиться
k чисел через пробіл
- Пошук мінімуму:
- Змінна
m зберігає мінімальне значення
- Порівнюється кожне нове число з поточним мінімумом
Тестування роботи програми:
Вихід:
k=47
a=12
b=58
23 34 12 45 ... 17
min=12
Значення будуть різними при кожному запуску програми.
Ключові моменти:
- Формула
min + rand() % (max - min + 1) для отримання чисел у діапазоні
- Початкове значення мінімуму ініціалізується першим числом
- Для сучасних проектів рекомендується використовувати
<random>
Приклад 3
Змоделювати гру «Камень, ножницы, бумага». Тобто, одержати випадковим чином два числа кожне (від 0 до 2).
Вважати 0 –камень, 1 –ножницы, 2 –бумага. Перемагають: камень бумагу, ножницы бумагу, бумага камінь.
Гру продовжувати у циклі з 3-х витків. Вести лічильники перемог кожного гравця.
Результат вивести у вигляді слів та вказати хто переміг, перший чи другий.
Наприклад:
1– бумага. 2 – камень. Переміг 1.
Програма для гри "Камінь, ножиці, папір"
Правила гри:
- 0 - Камінь
- 1 - Ножиці
- 2 - Папір
Переможні комбінації:
- Камінь (0) перемагає Ножиці (1)
- Ножиці (1) перемагають Папір (2)
- Папір (2) перемагає Камінь (0)
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
// Ініціалізація генератора випадкових чисел
srand(time(0));
int player1, player2;
int wins1 = 0, wins2 = 0; // Лічильники перемог
cout << "Гра 'Камінь, ножиці, папір' (3 раунди):" << endl;
// Граємо 3 раунди
for (int round = 1; round <= 3; round++)
{
// Генерація вибору гравців (0-2)
player1 = rand() % 3;
player2 = rand() % 3;
// Виведення вибору гравців
cout << "Раунд " << round << ": ";
cout << "1 - " << getChoiceName(player1) << ", ";
cout << "2 - " << getChoiceName(player2) << ". ";
// Визначення переможця раунду
if (player1 == player2) {
cout << "Нічия!" << endl;
}
else if ((player1 == 0 && player2 == 1) || // Камінь > Ножиці
(player1 == 1 && player2 == 2) || // Ножиці > Папір
(player1 == 2 && player2 == 0)) // Папір > Камінь
{
cout << "Переміг 1" << endl;
wins1++;
}
else {
cout << "Переміг 2" << endl;
wins2++;
}
}
// Визначення переможця гри
cout << "\nРезультат: ";
if (wins1 == wins2) {
cout << "Нічия!";
}
else if (wins1 > wins2) {
cout << "Загалом переміг гравець 1!";
}
else {
cout << "Загалом переміг гравець 2!";
}
return 0;
}
// Допоміжна функція для отримання назви вибору
string getChoiceName(int choice)
{
switch (choice) {
case 0: return "Камінь";
case 1: return "Ножиці";
case 2: return "Папір";
default: return "Невідомо";
}
}
Пояснення роботи програми:
- Ініціалізація:
- Генератор випадкових чисел ініціалізується з використанням поточного часу
- Створюються лічильники перемог для обох гравців
- Гральний цикл:
- Програма виконує 3 раунди гри
- Кожен гравець отримує випадковий вибір (0, 1 або 2)
- Визначення переможця:
- Якщо вибір однаковий - нічия
- Інакше перевіряються переможні комбінації
- Лічильник перемог оновлюється відповідно до результату
- Результат гри:
- Після 3 раундів виводиться загальний результат
Приклад виводу програми:
Гра 'Камінь, ножиці, папір' (3 раунди):
Раунд 1: 1 - Ножиці, 2 - Папір. Переміг 1
Раунд 2: 1 - Камінь, 2 - Камінь. Нічия!
Раунд 3: 1 - Папір, 2 - Ножиці. Переміг 2
Результат: Нічия!
Варіанти задач
Варіант 1
- Змоделювати гру «Камень, ножницы, бумага» комп’ютера з людиною. Тобто, ввести з клавіатури одне число (0, 1, 2), друге число одержати випадковим чином (від 0 до 2). Вважати 0 –камень, 1 –ножницы, 2 –бумага. Перемагають: камень бумагу, ножницы бумагу, бумага камень. Результат вивести у вигляді слів та вказати хто переміг, комп’ютер чи людина. Наприклад:
Введіть число (0, 1, 2) – 1
Людина – ножницы, комп’ютер – камень. Переміг комп’ютер .
- Одержати випадковим чином 20 цілих чисел (від -10 до 10), вивести їх на екран та знайти суму додатних.
Варіант 2
- Змоделювати 10 кісток доміно. Кожна кість це два випадкових числа (від 0 до 6). Для кожної кістки вивести результат у вигляді: „кість 4–0”.
- Одержати випадковим чином 15 цілих чисел (від 0 до 3), вивести їх на екран та знайти кількість 1.
Варіант 3
- Одержати випадковим чином 10 чисел (0 чи 1), що моделює кидання монети (0-решка, 1-орел).
Вивести результат, у вигляді: „орел” (якщо випало 1) та „решка” (якщо випало 0).Порівняти кількість „орлів” та „решок”.
- Одержати випадковим чином 10 цілих чисел (від -3 до 3), вивести їх на екран та знайти добуток додатних.
Варіант 4
- Змоделювати вартість та масть 10 гральних карт. Вартість це число від 6 до 14 (6, 7, 8, 9, 10, „валет”-11, „дама”-12, „король”-13, „туз”-14),
масть це число від 1 до 4 („пики”-1, „трефи”-2, „бубни”-3, „черви”-4). Результат вивести, наприклад, у вигляді : „ 6 трефи” або ”король пик”.
- Одержати випадковим чином 10 цілих чисел (від -10 до 10), вивести їх на екран та знайти кількість від’ємних.
Варіант 5
- Змоделювати гру двома гравцями у кості. Кожен гравець 5 разів кидає кубік (випадкове число від 1 до 6).
Вивести результат кожного гравця, його суму балів та з’ясувати, хто з них набрав більше балів.
- Одержати випадковим чином 10 цілих чисел (від -100 до 100), вивести їх на екран та знайти найменше з них.
Варіант 6
- Одержати випадковим чином десять чисел, що моделюють вартість гральних карт (випадкове число від 6 до 14).
Результат вивести у вигляді числа (для 6, 7, 8, 9, 10) або слова („валет” для 11, „дама” для 12, „король” для 13, „туз” для 14).
- Одержати випадковим чином 10 цілих чисел (від -50 до 50), вивести їх на екран та знайти найбільше з них.
Варіант 7
- Змоделювати 10 кісток доміно. Кожна кість це два випадкових числа (від 0 до 6). Для кожної кістки вивести результат у вигляді: „ 4–0”.
Для кожної кістки (починаючи з другої) вивести, чи можна її прикласти до попередньої згідно з правилами гри у доміно? Наприклад, якщо перша кість 4-0, а друга 5-4, то вивести "так", а якщо друга кість 5-6, то вивести "ні".
- Одержати у програмі 10 випадкових цілих чисел у діапазоні від -10 до 10 та знайти суму парних.
Варіант 8
- Змоделювати гру двома гравцями у карти. Перший гравець ходить (всього 5 ходів), а другий відбиває. Кожна карта випадкове число від 6 до 14 одної масті.
Вивести для кожного ходу карту, яку походив перший гравець, карту, якою відбивався другий гравець у вигляді числа (для 6, 7, 8, 9, 10) або слова („валет” для 11, „дама” для 12, „король” для 13, „туз” для 14).
Якщо карту можна відбити (вартість карти другого гравця більша, ніж у першого), то вивести "відбив", у іншому випадку "не відбив".
- Змоделювати у програмі 15 випадкових цілих чисел у діапазоні від -15 до 15, вивести їх на екран та знайти найменше з них.
Варіант 9
- Змоделювати гру «Камень, ножницы, бумага» комп’ютера з людиною. Гру продовжувати у циклі до перемоги будь-кого. Тобто, ввести з клавіатури число (0, 1, 2), друге число одержати випадковим чином (від 0 до 2). Якщо ніхто не переміг знов ввести одне число, а друге одержати випадковим чином. Вважати 0 –камень, 1 –ножницы, 2 –бумага. Перемагають: камень бумагу, ножницы бумагу, бумага камень. Результат вивести у вигляді слів та вказати хто переміг, комп’ютер чи людина. Наприклад:
Введіть число (0, 1, 2) – 1
Людина – ножницы, комп’ютер – ножницы.
Введіть число (0, 1, 2) – 2
Людина – бумага, комп’ютер – камень.
Перемога людини.
- Одержати у програмі 15 випадкових цілих чисел у діапазоні від –6 до 6 та знайти кількість від’ємних.
Варіант 10
- Скласти програму, що на 5 прикладах перевіряє вміння додавати однозначні числа. В ній випадковим чином одержати два числа (від 0 до 9), після чого на екран вивести приклад у вигляді:
„4 + 9 =”. Після вводу відповіді повинно видаватись повідомлення, чи відповідь вірна.
- Одержати у програмі 20 випадкових цілих чисел у діапазоні від -А до A включно. Вивести їх на екран та знайти серед них найбільше. Число A ввести з клавіатури.
Варіант 11
- Скласти програму, що на 5 прикладах перевіряє вміння віднімати однозначні числа. В ній випадковим чином одержати два числа (від 0 до 9), після чого на екран вивести приклад у вигляді:
„4 - 9 =”. Після вводу відповіді повинно видаватись повідомлення, чи відповідь вірна.
- Одержати у програмі k випадкових цілих чисел у діапазоні від -А до A включно.
Вивести їх на екран та знайти серед них найменше. Числа A та k ввести з клавіатури.
Варіант 12
- Скласти програму, що на 5 прикладах перевіряє знання таблиці множення. В ній випадковим чином одержати два числа (від 0 до 9),
після чого на екран виводиться приклад у вигляді: „4 * 9 =”. Після вводу відповіді повинно видаватись повідомлення, чи відповідь вірна.
- Одержати у програмі k випадкових цілих чисел у діапазоні від 0 до A включно та знайти кількість тих, що закінчуються цифрою 3. Числа A та k ввести з клавіатури.
Варіант 13
- Скласти програму, що на 5 прикладах перевіряє вміння додавати двохзначні числа. В ній випадковим чином одержати два числа (від 10 до 99), після чого на екран вивести приклад у вигляді:
„92 + 41 =”. Після вводу відповіді повинно видаватись повідомлення, чи відповідь вірна.
- Одержати у програмі k випадкових цілих чисел у діапазоні від 0 до A та вивести на екран тільки ті, що кратні 3.
Числа A та k ввести з клавіатури.
Варіант 14
- Скласти програму, що на 5 прикладах перевіряє вміння віднімати двохзначні числа. В ній випадковим чином одержати два числа (від 10 до 99), після чого на екран вивести приклад у вигляді:
„92 -41 =”. Після вводу відповіді повинно видаватись повідомлення, чи відповідь вірна.
- Одержати у програмі k випадкових цілих чисел у діапазоні від -А до A, вивести їх на екран та пірахувати кількість тих, що = С. Числа A, k та С ввести з клавіатури.
Варіант 15
- Скласти програму, що на 5 прикладах перевіряє вміння додавати двохзначні числа. В ній випадковим чином одержати два числа (від 10 до 99), після чого на екран вивести приклад у вигляді:
„41 + 92 =”. Після вводу відповіді повинно видаватись повідомлення, чи відповідь вірна. Наприкінці підраховувати кількість вірних та невірних відповідей та в кінці поставити оцінку.
- Одержати у програмі k випадкових цілих чисел у діапазоні від -А до A та вивести на екран тільки ті, що <С.
Числа A, k та С ввести з клавіатури.
Варіант 16
- Скласти програму, що на 5 прикладах перевіряє вміння віднімати двохзначні числа. В ній випадковим чином одержати два числа (від 10 до 99), після чого на екран вивести приклад у вигляді:
„92 - 41 =”. Після вводу відповіді повинно видаватись повідомлення, чи відповідь вірна. Наприкінці підраховувати кількість вірних та невірних відповідей та поставити оцінку.
- Одержати у програмі k випадкових цілих чисел у діапазоні від 0 до A включно та знайти суму тих, що > A / 2.
Числа A (10<=A<=30 ) та k (15<=k<=20) одержати випадковим чином.
Варіант 17
- Скласти програму, що на 5 прикладах перевіряє знання таблиці множення. В ній випадковим чином одержати два числа (від 10 до 99),
після чого на екран вивести приклад у вигляді: „ 14 * 20 =”.
Після вводу відповіді повинно видаватись повідомлення, чи відповідь вірна. Наприкінці підраховувати кількість вірних та невірних відповідей та поставити оцінку.
- Одержати у програмі k випадкових цілих чисел у діапазоні від A до B та вивести на екран тільки ті, що >C.
Числа A (10<=A<=20 ), B(25<=B<=40 ), C (15<=C<=30) та k (10<=k<=15) одержати випадковим чином.
Назад
Зміст
Вперед