Другие языки программирования и технологии
Допустим, есть у меня промежуток от 1 до 10000. Компьютер даёт мне рандомное число из этого промежутка и спрашивает
Это оно? Я говорю: нет, да. Если нет, то как запомнить число, чтобы компьютер его больше не спрашивал? Вариант с "моё число больше, меньше этого" не рассматривается.
Или вот так)
#include <iostream>
#include <random>
#include <set>
#include <conio.h>
using namespace std;
class Game {
public:
void play() {
do {
system("cls");
cout << "The game has begun!\n";
if (!box_.empty()) box_.clear();
auto flag = true;
const uniform_int_distribution<unsigned int> uid(l, r);
random_device rd;
mt19937 gen(rd());
do {
auto num = uid(gen);
if (check_(num)) {
if (box_.size() == r) break;
cout << "It's " << num << "\nNo - press 0, Yes - press any key... ";
auto ch = tolower(_getch());
if (ch != '0') {
flag = !flag;
cout << "\nWinner!";
}
cout.put('\n');
}
} while (flag);
cout << "Game over!\nPress any key for continue or ESC for exit... ";
} while (_getch() != 0x1B);
}
private:
set<unsigned int> box_;
const static auto l = 1U;
const static auto r = 10U;
bool check_(unsigned int num) {
if (box_.count(num)) return false;
box_.insert(num);
return true;
}
};
int main() {
Game game;
game.play();
}
#include <iostream>
#include <random>
#include <set>
#include <conio.h>
using namespace std;
class Game {
public:
void play() {
do {
system("cls");
cout << "The game has begun!\n";
if (!box_.empty()) box_.clear();
auto flag = true;
const uniform_int_distribution<unsigned int> uid(l, r);
random_device rd;
mt19937 gen(rd());
do {
auto num = uid(gen);
if (check_(num)) {
if (box_.size() == r) break;
cout << "It's " << num << "\nNo - press 0, Yes - press any key... ";
auto ch = tolower(_getch());
if (ch != '0') {
flag = !flag;
cout << "\nWinner!";
}
cout.put('\n');
}
} while (flag);
cout << "Game over!\nPress any key for continue or ESC for exit... ";
} while (_getch() != 0x1B);
}
private:
set<unsigned int> box_;
const static auto l = 1U;
const static auto r = 10U;
bool check_(unsigned int num) {
if (box_.count(num)) return false;
box_.insert(num);
return true;
}
};
int main() {
Game game;
game.play();
}
Первое что приходит в голову - запихивать каждое рандомное число в массив и при каждом запросе пробегать по этому массиву. Если в нем есть совпадение с данным рандомным числом - значит на этой итерации цикла следует пропуск, continue или что там еще...
Два способа: а) запоминать в массиве выданные раньше числа и проверять новое на несовпадение с ними; б) взять числа от 1 до 10000, перетасовать их, например, по алгоритму Кнута и выбирать каждый раз следующее число.
Евгений Боровский
Спасибо.
Ещё вариант - сгенерировать какое-то рандомное число x, взаимно простое с 10000, и каждое последующее число называть как i*x по модулю 10000 + 1. Тогда за 10000 итераций каждое число как раз будет перебрано по разу.
Либо любую другую биективную функцию использовать, на входе принимающую от 1 до 10000, на выходе тоже от 1 до 10000.
Либо любую другую биективную функцию использовать, на входе принимающую от 1 до 10000, на выходе тоже от 1 до 10000.
https://jsfiddle.net/x6a5gLbu/ как то так
а язык то какой?
Похожие вопросы
- 1. Написать программу, которая заполняет массив целых чисел размеров 20 элементов значениями роста учащихся (случайные ч
- дано целое число n,вывести все числа от 1 до n,и кол во этих чисел
- 1.Найти количество двоек в разложении натурального числа М на простые множители.
- Мне нужно создать файл .bat который будет через 1 час перезагружать компьютер... Напишите код под хр?
- Запишите функцию для получения случайного числа x из промежутка: [0; 15) [0; 15] [-15; 15) [10; 15)
- Exсel (промежуток)
- Задача по информатике: Найти все простые числа в промежутке от 20 до 70 ? Не могу решить
- Приведите алгоритмы нахождения простых чисел в заданном промежутке
- Упорядочить массив по убыванию из 10 случайных чисел на промежутке от -500 до 500. Информатика, 9 класс.
- Вопрос по VBA(В Excel) Нужно решить y=x^2*cos(2x)+1 в 0->50 промежутке Дайте польный ответ или подзказки