Игра угадать число от 1 до 100 с подсчетом попыток
Привет, я не могу понять как сделать так чтоб подсчитывались попытки в коде
Нужно:
Добавьте в игру функционал, подсчитывающий попытки и выводящий в конце игры за сколько попыток было угадано число.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var x = prompt("Введите число, которое требуется угадать, от 1 до 100"); if (x > 100 || x 1) { alert("Введите число от 1 до 100") } else { var y = prompt("Угадайте число"); while (y x) { var y = prompt("Загаданное число больше") } while (y > x) { var y = prompt("Загаданное число меньше") } alert("Верно! Вы отгадали число");
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Программа загадывающая число от 1 до 100, а человек должен угадать с 10 попыток
Здравствуйте, написан макрос, который загадывает случайное число, а человек должен угадать это.
Угадать число от 1 до 100 за 7 попыток: есть ли более изящный подход, чем if/else?
Задача заключается в том что нужно написать программу который угадывает число пользователя от 1 до.
82 / 21 / 18
Регистрация: 25.06.2015
Сообщений: 73
Сообщение было отмечено AmgGg как решение
Решение
Задать еще одну переменную счетчик, и ее увеличивать на каждой итерации
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
var x = prompt("Введите число, которое требуется угадать, от 1 до 100"); var count = 0; if (x > 100 || x 1) { alert("Введите число от 1 до 100") } else { var y = prompt("Угадайте число"); while (y x) { var y = prompt("Загаданное число больше") count = count + 1; } while (y > x) { var y = prompt("Загаданное число меньше") count = count + 1; } if (x == y) {alert("Верно! Вы отгадали число")} alert("попыток:" + count)}
Хотя тут логика все еще направильно, додумайте сами этот небольшой ньюанс
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Вывести на экран количество попыток угадать число
Программа угадайка генерирует случайные числа в пределах от 0 до 100 пользователь должен угадть его.
Игра «Угадать загаданное число от 1 до 100» (пояснить/изменить/дописать). Формы
Здравствуйте, я в начале пути изучения VBA, прошу подсказать моменты, которые не выходят. Или.
Цикл while, угадать сгенерированное целое число в диапазоне от 1 до 10 за 5 попыток
С помощью цикла while, угадать сгенерированное целое число в диапазоне от 1 до 10 за 5 попыток .
Предложить пользователю угадать сгенерированное компьютером целое число в диапазоне от 1 до 10 за 5 попыток
Помогите пожалуйста написать три кода для данной задачи с помощью for, while, do while. .
Программа задумывает число в диапазоне от 1 до 10 и предлагает пользователю угадать его за 5 попыток
Написать программу, которая задумывает число в диапазоне от 1 до 10 и предлагает пользователю.
AlexWain / Угадай число 7 попыток.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
package com . example . alexwilkinson . myapplication ; |
import android . support . v7 . app . AppCompatActivity ; |
import android . os . Bundle ; |
import java . util . Random ; |
import java . util . Scanner ; |
/*Программа загадывает рандомно число от 1 до 50. У пользователя будет семь попыток угадать это число. |
Если загаданное число больше, введённого пользователем или меньше, выводим соответствующее сообщение |
(«Загаданное число больше» или «. меньше») и количество оставшихся попыток. |
Если пользователь угадал, выводим сообщение о победе. Если пользователь исчерпал попытки — |
«Game Over».*/ |
public class MainActivity extends AppCompatActivity |
public static void main ( String [] args ) |
Random newRandom = new Random (); |
int randomnumber = newRandom . nextInt ( 51 ) + 1 ; |
System . out . println ( «Введите число от 1 до 50:» ); |
Scanner newScanner = new Scanner ( System . in ); |
int scannerNumber = newScanner . nextInt (); |
if ( scannerNumber > randomnumber || scannerNumber < randomnumber ) |
for ( int schetchik = 7 ; schetchik > 0 ; — schetchik ) |
if ( scannerNumber > randomnumber ) |
System . out . println ( «Ваше число больше загаданного Осталось попыток: » + schetchik ); |
Scanner newscannerT = new Scanner ( System . in ); |
int scannerttwo = newscannerT . nextInt (); |
scannerNumber = scannerttwo ; |
> |
else if ( scannerNumber < randomnumber ) |
System . out . println ( «Ваше число Меньше загаданного. Осталос попыток » + schetchik ); |
Scanner newscnnaerThr = new Scanner ( System . in ); |
int newScannerThree = newscnnaerThr . nextInt (); |
scannerNumber = newScannerThree ; |
> |
> |
if ( scannerNumber == randomnumber ) |
System . out . println ( «Победа!» ); |
> |
> |
if ( scannerNumber > randomnumber || scannerNumber < randomnumber ) |
System . out . println ( «Поражение!» ); |
> |
> |
> |
Угадать число от 0 до 100 за 7 попыток — математический трюк
Математический фокус, который способен удивить. Объясним алгоритм и напишем на Java простенькую программу для решения.
Этот математический фокус не так сложен, как может показаться на первый взгляд. Более того, решение мы реализуем программно на языке Java. Приступим?
Условие
Если расписать весь процесс поэтапно, выглядит это следующим образом:
- Вы загадываете число от 0 до 100.
- Программа выводит целое число в рамках данного диапазона.
- Вы отвечаете, ваше число больше, меньше или равно тому, что вывела программа.
- Если число больше либо меньше, программа продолжает предлагать варианты.
- За 7 или менее попыток число гарантированно угадывается.
Решение
На самом деле, никакого особого секрета здесь нет, и решение строится на бинарном поиске. Это простая алгоритмическая задача, смысл которой в том, чтобы каждый раз делить оставшийся диапазон на 2. Таким образом мы с каждой попыткой вдвое сокращаем область поиска, увеличивая шансы на успех. Вот и весь математический фокус.
Допустим, первой догадкой алгоритма будет число 50, после чего становится понятно, в какую сторону исходного диапазона «шагать» дальше: это будет область 0–50 либо 51–100. Если первый вариант, то далее алгоритм предложит число 25 и так далее. Математические законы предполагают, что если число 100 делить вдвое 7 раз, мы гарантированно получим результат в районе единицы.
Можно найти число и в диапазоне побольше — от 0 до 127 или от 1 до 128. Всё потому, что 27=128. Соответственно, если у нас будет 8 попыток, область можно увеличить до 256, если 9 — до 512 и т. д. По этому же принципу работают бинарные деревья.
Но решать всё вручную с калькулятором наперевес — прошлый век. Давайте подключим код и посмотрим, как с этим справится программа.
Решение кодом
Воспроизведём решение с помощью Java без использования графического интерфейса. При желании всегда можно подключить Swing или JavaFX.
Для начала определимся с переменными, которые нам потребуются:
//заданные границы: int min = 0; int max = 100; //середина области: int midrange = Math.round((min + max) / 2); //строка для работы с терминалом: String strInput = "";
Поскольку мы будем работать с терминалом, подключим слушатель событий с помощью класса Scanner:
import java.util.Scanner;
И объявим переменную слушателя:
Scanner scan = new Scanner(System.in);
Далее всё просто: программа выводит варианты, а пользователь отправляет + , — или = , в зависимости от того, больше загаданное число, меньше или идентично. Пока введённое значение не = ( while (!strInput.equals(«=»)) ), продолжаем вычислять и делить заданный диапазон:
import java.util.Scanner; public class Main < public static void main(String[] args) < int min = 0; int max = 100; int midrange = Math.round((min + max) / 2); String strInput = ""; Scanner scan = new Scanner(System.in); System.out.println("Загадайте число от 0 до 100: я угадаю его за 7 попыток!\n" + "Чтобы продолжить, введите любое значение:"); strInput = scan.nextLine(); while (!strInput.equals("=")) < System.out.println("Это число больше, меньше или равно " + midrange + "? " + "Введите '+' если больше, '-' если меньше и '=' если равно:"); strInput = scan.nextLine(); if (strInput.equals("=")) < System.out.println("Отлично! Ваше число " + midrange + ". Спасибо за игру ;)"); break; >else if (strInput.equals("+")) < //уменьшаем диапазон: min = midrange; //находим новую середину диапазона: midrange = Math.round((min + max) / 2); //если округление сравнило середину с нижней границей, увеличиваем середину на 1: if (min == midrange && midrange!=100) < midrange += 1; >> else if (strInput.equals("-")) < max = midrange; midrange = Math.round((min + max) / 2); >> > >
Понравилась задачка? Держите ещё один математический фокус в виде гипотезы Коллатца.
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Как угадать число от 0 до 100 или математический фокус
Интересный математический фокус, который только на первый взгляд может показаться сложным, но на самом деле это не так!
Условие:
- Необходимо загадать любое число от 0 до 100.
- Перед вами появляется целое число, выданное программой и соответствующее диапазону.
- Вам необходимо указать – предложенное число больше, меньше или равно тому, что вы загадали.
- Если программа не угадала – она продолжит предлагать числа.
- Менее чем за 7 попыток искомое число программа все же сгенерирует.
Решение.
Для получения ответа достаточно просто воспользоваться алгоритмом бинарного поиска. То есть, чтобы найти искомое число, следует каждый раз осуществлять деление оставшегося диапазона на 2. Тем самым мы сокращаем объем поиска при каждом проведении действия. Вот и все – правильный ответ всегда будет найден.
Например, первым программа предложит число 50, мы выбираем один из возможных диапазонов, больше 50 – 51-100 или меньше 0-49. Если вариант меньше – следующим числом скорее всего будет 25. Действия будут повторяться, и искомое число наконец найдется.
Согласно законам математики, при делении числа 100 на 2 в течение 7 раз – результат будет порядка 1.
Но так как 2 в седьмой степени – это 128, диапазон может быть увеличен и иметь вид от 1 до 128 или от 0 до 127. А при увеличении возможных попыток, например, до 8, диапазон также может вырасти до 256 и так далее.
Больше интересных новостей
Задача с 4 малярами
Бракованные батарейки: логическая задача для тренировки мозгов
Решаем задачи, которые многих ставят в тупик
Удастся ли вам получить наследство?
Комментарии (1)
Томеус 03 мая 2023 в 09:24