@mihail9108
Программист-самоучка.

Как сделать программу для угадывания загаданных чисел JS?

Пытаюсь решить задачу на JS. Но увы, ничего не получается. Поэтому решил написать свой первый пост.
Суть такова:
Требуется программа на JavaScript, которая будет угадывать загаданное число, с помощью метода бинарного поиска. Диапазон чисел от 1 до 100.
Процесс работы:
1. пользователь загадывает число от 1 до 100,
2. программа спрашивает пользователя «это число 50?» и есть три варианта ответа «да», «нет, меньше 50», «да, больше 50».

Пытался написать код, но пока ничего толкового не выходит. Мои успехи:
<p>Ввведите число: <input type="text" id="mynum"></p>
<button onclick="f1()">Загадать</button>
<hr>
<p id="out"></p>
<p id="temp-out"></p>

<script defer>
    const arr = [];
    for (let i = 0; i < 101; i++) {
        arr[i] = i;
    }
    function sIncrease(i, ii) {
        if (i > ii)
            return 1;
        else if (i < ii)
            return -1;
        else
            return 0;
    }
    arr.sort(sIncrease);

    function f1() {
        var num, prNum, tempOut, out;

        num = document.getElementById('mynum').value;
        out = document.getElementById('out');

        while(i<100){
            prNum = Math.floor ((Math.random() * 100)/2);
            /
            alert ( 50?);
            howManyGuesses = howManyGuesses  + 1; //increment the amount of guesses
            //your logic
            alert ("Got it! It was a " + guess + ". It took me " + howManyGuesses  + " guesses.");
        }

        if (num == prNum) {
            out.innerHTML = 'Вы угадали';
        }
        else if (num > 50) {
            out.innerHTML = 'Да, больше 50';
        }
        else (num <50){
            out.innerHTML = 'Нет, меньше 50';
        }
    }
</script>
  • Вопрос задан
  • 3679 просмотров
Пригласить эксперта
Ответы на вопрос 4
Math.random() - Загадать число.
А дальше запрашиваете вариант у пользователя и подсказываете - больше \ меньше. И в случае совпадения - Победа
Ответ написан
sergiks
@sergiks Куратор тега JavaScript
♬♬
В процессе угадывания будут сдвигаться границы диапазона: и нижняя и верхняя. Изначально эти границы 1 и 100. Вопрос задаётся каждый раз про середину диапазона между этими двумя границами.

Таким образом, понадобятся две переменные с этими границами.

Грязный код, но примерно работает:

Todo: надо предусмотреть конечные случаи, когда остаётся всего два варианта, например, 48 или 49.
Тогда надо предположить одно из них, и оставить вместо трёх, всего две кнопки: "Да, это оно" и "Нет, больше".
Ответ написан
@mihail9108 Автор вопроса
Программист-самоучка.
Немного допилил свой код. Теперь после нажатия на кнопку загадать браузер выдает ответы(Да, больше 50,Нет, меньше 50). Но угадывать число не хочет все равно
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<p>Ввведите число: <input type="text" id="mynum"></p>
<button onclick="f1()">Загадать</button>
<hr>
<p id="out"></p>
<p id="temp-out"></p>

<script defer>
    const arr = [];
    for (let i = 0; i < 101; i++) {
        arr[i] = i;
    }
    function sIncrease(i, ii) {
        if (i > ii)
            return 1;
        else if (i < ii)
            return -1;
        else
            return 0;
    }
    arr.sort(sIncrease);

    function f1(i,j) {
        var num, prNum, tempOut, out, i=1, j=arr.length;

        num = document.getElementById('mynum').value;
        out = document.getElementById('out');

        while(i<100){
            prNum = Math.floor ((Math.random() * 100)/2);



        if (num == prNum)
            alert('Вы угадали');

        else if (num > 50)
            alert('Да, больше 50');

        else (num <50)
            alert('Нет, меньше 50');
        }
    }
</script>
</body>
</html>
Ответ написан
@Azperin
Дилетант
Я мб чего не понял, но выглядит примерно так
var arr = Array(100).fill(1).map((v,i) => v + i); // будем считать что уже сделан .sort
function binaryGuess(arr) {
	if (arr.length === 1) {
		return alert('Загаданое число было ' + arr[0]);
	};
	if (arr.length < 1) {
		return alert('Где то меня обманули');
	};
	var nextIdx = Math.floor(arr.length / 2); 
	
	if (confirm('Ответ ' + arr[nextIdx] + ' ?')) {
		return alert('Я это итак знал');
	} else {
		if (confirm('Больше ?')) {
			binaryGuess(arr.slice(nextIdx));
		} else {
			binaryGuess(arr.slice(0, nextIdx - 1));
		};	
	};
};

function startGuessing(r) {
	alert('Ты загадал ' + r);
	binaryGuess(arr);
	if (confirm('Повторим ?')) {
		startGuessing(rand());
	};	
};

startGuessing(rand());

function rand() {
	return Math.floor(Math.random() * (100 - 1) + 1);
};
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы