Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/47: Рейтинг темы: голосов - 47, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8

Игра "Угадай число"

29.04.2011, 23:40. Показов 10094. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите написать программу!!!Вот задание: Игра «Угадай число»: составьте программу определения компьютером задуманного человеком числа от 1 до 1000 с помощью 10 вопросов. Ответы человека – да, нет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2011, 23:40
Ответы с готовыми решениями:

Игра в угадай число
Вот код. #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main (){ srand(time (0)); ...

Игра «Угадай число»
Игра «Угадай число». Программа отгадывание целого числа, которое «загадал» компьютер в определенном диапазоне. Максимальное количество...

Игра «Угадай число»
4. Игра «Угадай число». Компьютер загадывает число, человек отгадывает. Всего 5 попыток. (random)

31
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
29.04.2011, 23:49
Двоичный поиск в помощь.
0
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
29.04.2011, 23:59  [ТС]
Цитата Сообщение от neske Посмотреть сообщение
Двоичный поиск в помощь.
Если можно, поподробнее и попонятнее??!!!

Добавлено через 6 минут
И еще забыл написать, что текст программы нужен для borland c++ 3.1
0
36 / 24 / 3
Регистрация: 05.01.2010
Сообщений: 37
30.04.2011, 00:04
0 шаг: число принадлежит интервалу [1, 1000], выбираем среднее - 500
1 шаг: спрашиваем: "число равно?", "число больше?".
2 шаг: если число равно, то все
3 шаг: если число больше, берем интервал [501, 1000] и среднее на нем, иначе берем интервал [1, 499], идем на шаг 1.

Примерно так построен бинарный поиск.
P.S. решение, кстати, может быть достигнуто меньше, чем за 10 шагов.
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
30.04.2011, 00:16
HeM01, ну 10 шагов - это худший случай) можно и за первый шаг угадать)
0
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.04.2011, 11:37  [ТС]
Цитата Сообщение от HeM01 Посмотреть сообщение
0 шаг: число принадлежит интервалу [1, 1000], выбираем среднее - 500
1 шаг: спрашиваем: "число равно?", "число больше?".
2 шаг: если число равно, то все
3 шаг: если число больше, берем интервал [501, 1000] и среднее на нем, иначе берем интервал [1, 499], идем на шаг 1.

Примерно так построен бинарный поиск.
P.S. решение, кстати, может быть достигнуто меньше, чем за 10 шагов.
Этот способ решения уже пробовал, сразу возникают проблемы: как задать числа от 1 до 1000 и как отсеивать только нужный интервал чисел после каждого вопроса??
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
30.04.2011, 11:46
Pravdin, вас же уже натолкнули на мысль... Не уж то так сложно поискать материал самостоятельно?
Вот: http://ru.wikipedia.org/wiki/Двоичный_поиск
0
В вечном поиске...
 Аватар для Nursik77
275 / 235 / 30
Регистрация: 05.04.2011
Сообщений: 645
30.04.2011, 11:49
0 шаг:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define n 1
int main()
{
int a[n];
int i;
clrscr();
randomize();
printf("Randomnoe chislo v intervale ot 1 do 1000: \n");
for(i=0;i<n;i++)
 {a[i]=random(1000);
  printf(" %i",a[i]);
 }
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
30.04.2011, 13:27
Nursik77, а где логика в создании массива под один элемент?)
0
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.04.2011, 15:24  [ТС]
Как массивом задать числа от 1 до 1000???
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
30.04.2011, 15:42
Pravdin, А смысл?
Для этой задачи хватит и двух переменных - нижняя граница и верхняя граница. Изначально нижняя граница = 1. Верхняя граница = 1000.
Очередной вопрос: задуманное число меньше (нижняя граница + верхняя граница)/2 ?
Если ответ да, то верхняя граница становится равной (нижняя граница + верхняя граница)/2. Если ответ нет, то нижняя граница становится равной (нижняя граница + верхняя граница)/2-1.
Главное во время остановится....
0
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.04.2011, 16:00  [ТС]
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Pravdin, А смысл?
Для этой задачи хватит и двух переменных - нижняя граница и верхняя граница. Изначально нижняя граница = 1. Верхняя граница = 1000.
Очередной вопрос: задуманное число меньше (нижняя граница + верхняя граница)/2 ?
Если ответ да, то верхняя граница становится равной (нижняя граница + верхняя граница)/2. Если ответ нет, то нижняя граница становится равной (нижняя граница + верхняя граница)/2-1.
Главное во время остановится....
Смысл в том что двоичный поиск ищит x элемент в массиве a[n], отсортированного в возрастающем порядке
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
30.04.2011, 16:04
Цитата Сообщение от Pravdin Посмотреть сообщение
Вот задание: Игра «Угадай число»: составьте программу определения компьютером задуманного человеком числа от 1 до 1000 с помощью 10 вопросов. Ответы человека – да, нет.
Цитата Сообщение от Pravdin Посмотреть сообщение
Смысл в том что двоичный поиск ищит x элемент в массиве a[n], отсортированного в возрастающем порядке
А, ну тогда ладно!))))
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
30.04.2011, 16:09
Pravdin, смысл в том, что если забить массив элементами от 1 до 1000 по возрастанию и делить этот массив на два, и если то же проделывать с числом 1000 - будет получаться одно и то же.
0
114 / 114 / 13
Регистрация: 29.04.2010
Сообщений: 240
30.04.2011, 16:13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int left = 1, right = 1000;
    while (right - left)
    {
        int middle = left + (right-left)/2;
        cout<<"Number > "<<middle<<" ?"<<endl;
        string ans; cin>>ans;
        if (ans == "yes")
            left = middle + 1;
        else
            if (ans == "no")
                right = middle;
    }
    cout<<"Your number is "<<left<<"!"<<endl;
    return 0;
}
Вроде больше 10 вопросов не получается.
0
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.04.2011, 16:20  [ТС]
Цитата Сообщение от PraZuBeR Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int left = 1, right = 1000;
    while (right - left)
    {
        int middle = left + (right-left)/2;
        cout<<"Number > "<<middle<<" ?"<<endl;
        string ans; cin>>ans;
        if (ans == "yes")
            left = middle + 1;
        else
            if (ans == "no")
                right = middle;
    }
    cout<<"Your number is "<<left<<"!"<<endl;
    return 0;
}
Вроде больше 10 вопросов не получается.
В ВС31 не хочет работать!что 3 строчка значит??
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
30.04.2011, 16:28
Pravdin, снесите её, а расширения у хидеров поставьте .h
0
0 / 0 / 0
Регистрация: 29.04.2011
Сообщений: 8
30.04.2011, 16:29  [ТС]
Цитата Сообщение от Pravdin Посмотреть сообщение
string ans
Он не понимает эту строчку!!((
0
3 / 3 / 2
Регистрация: 21.01.2011
Сообщений: 29
30.04.2011, 16:34
программа хр***вая, например загадал число 25, оно его не проверяло и под конец сказало что мое число это 1...
0
Программист
 Аватар для prZzZ
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
30.04.2011, 17:01
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
    char buf[10];    
    int left = 1, right = 1000;
    while (right - left)
    {
        int middle = left + (right-left)/2;
        printf("Number > %d ?", middle);
        if(gets(buf))
            if(!strcmp(buf,"yes"))
                left = middle + 1;
            else
                if (!strcmp(buf,"no"))
                    right = middle;
    }
        printf("Your number is %d!\n", left);
    return 0;
}
Добавлено через 4 минуты
SK01736,
Number > 500 ?no
Number > 250 ?no
Number > 125 ?no
Number > 63 ?no
Number > 32 ?no
Number > 16 ?yes
Number > 24 ?yes
Number > 28 ?no
Number > 26 ?no
Number > 25 ?no
Your number is 25!
Press any key to continue

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2011, 17:01
Помогаю со студенческими работами здесь

игра казино (угадай число)
Задали задание сделать вот такое казино чисел, сделал, показал ему, сказал сделать чтобы баланс отрицательный вводить нельзя было и циклов...

Игра угадай число, необходимо сделать ввод n в string a
Необходимо сделать, чтобы вводили &quot;Мало, прибавь и (здесь любое число)&quot;, как это сделать, вот код #include &lt;iostream&gt; #include...

Игра "Угадай число", не работает условие угадать число за 5 попыток
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int main() { int n; int x; int count = 0; ...

Игра "Угадай число" на Turbo C++
помогите пожалуйста.Нужно создать игру угадай число на turbo c ++. Один из играющих задумывает число от 1 до 1000, другой пытается угадать...

Готовая игра "угадай число"
#include &lt;iostream.h&gt; int main () { int x=rnd%256; int d; int masks={0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 10.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 09.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 09.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 09.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 08.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 08.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 08.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru