Форум программистов, компьютерный форум CyberForum.ru

Компьютер угадывает число - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.80
zzztop
Сообщений: n/a
09.02.2013, 21:39     Компьютер угадывает число #1
Пользователь загадывает число от 1 до 100 и компьютер пытается угадать. На каждую попытку компьютера пользователь отвечает, больше (h) искомое число, или меньше (l). Я попытался реализовать это,уменьшая границы рандома. Например, я загадал 26. Если компьютер пишет 50, я отвечаю 'l'. Тогда рандом принимает вид rand()%50+1. Компьютер пишет 25, я отвечаю 'h', тогда рандом принимает вид rand()%50+25. Можно ли использовать переменные в рандоме? Если да, то подскажите пожалуйста, в чем ошибка?
p.s. если все время отвечать 'l', то все работает, компьютер доходит вплоть до единицы. Когда отвечаю 'h', почти все время происходят сбои.
p.p.s. я новичок, конечно. работаю в code.blocks. В поиске подобного решения вроде нет.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <time.h>
using namespace std;
 
int main()
{
srand ( time(NULL) );
int x=100,y=1, number;
char v;
    while (v!='y')
    {
        i++;
        number=rand()%x+y;
        cout << number << "\n";
        cin >> v;
        if (v=='l') x=number-1;
        if (v=='h') y=number+1;
        if (v=='y') break;
    }
    cout << "Yeah! I've done it in " << i << " moves!";
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2013, 21:39     Компьютер угадывает число
Посмотрите здесь:

компьютер генерирует число из 4 неповторяющихся чисел C++
Написать программу, реализует следующую игровую ситуацию: компьютер задает случайное целое число в интерали от 1 до 10, а мне нужно это число угадать C++
Дано 2-ух-значное число. Сделать так, чтоб программа преобразовала это число в новое число кол-во десятков C++
Некоторое число оканчивается на 2. Если же эту его последнюю цифру переставить на первое место, то число удвоится. Найти это число C++
Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
09.02.2013, 22:14     Компьютер угадывает число #2
какой в баню рандом?
воспользуйся бинарным поиском, бро

Добавлено через 11 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int main()
{
 
int x=100,y=1, number, i;
char v;
    while (v!='y')
    {
        i++;
        number=y+(x-y)/2;
        cout << number << "\n";
        cin >> v;
        if (v=='l') x=x-(x-y)/2;
        else if (v=='h') y=y+(x-y)/2;
        else if (v=='y') break;
    }
    cout << "Yeah! I've done it in " << i << " moves!";
    return 0;
}
Whiskasin
0 / 0 / 0
Регистрация: 11.06.2015
Сообщений: 3
12.11.2015, 22:20     Компьютер угадывает число #3
Ну хз:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <cstdlib>
#include <ctime>
using std::cout;
using std::cin;
using std::endl;
int main() {
    srand(static_cast <unsigned int> (time(0)));
    //Start up of random generator
    int randomNumber = rand() % 100 + 1;
    cout << randomNumber << endl;
    int guess;
    cout << "\tWelcome to Guess My Number\n\n";
    cout << "Enter a guess: ";
    cin >> guess;
 
    do {
        if (randomNumber < guess)
        {           
            randomNumber++;
            cout << "Too low!\n";
        }
        else if (randomNumber > guess) {
            randomNumber--;
            cout << "Too high!\n";
        }
        else
        {
            break;
        }
    } while (guess != randomNumber);
 
    return 0;
}
Если меньше рандомного числа, тогда увеличивается на единицу, если больше, то уменьшается. Не скажу, что это кул у меня написано, да и пост выше получше будет) Но, кидаю что умог.
SaFaiR
0 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 1
20.11.2015, 20:59     Компьютер угадывает число #4
Решал я задачу долго, но вывел алгоритм для того, что бы ровно за 7 вопросов, программа могла точно сказать, какое число загадал ползователь. Самую большую проблему составило решить проблему "потери" единицы в результате повторного деления целочисленого числа на 2
Кликните здесь для просмотра всего текста
(25/2=12 (тут 0,5 "пропадает", и после 12 / 2 = 6; 6 / 2=3; 3 / 2 = 1 (вот и вторая "половинка", которая сумарно приводила к потере 1-цы)

Поэтому в 6-ой итерации добавил 1-цу.
Так же изза того, что алгоритм предполагает только строгое неравенство, то в последней итерации у нас возникает ситуация, когда у компьютера осталось на выбор два числа. опустим 47 и 48. Компьютер задает вопрос, "Ваше число больше 47?", то в случае утвертительного ответа добавляется единица, в случае отритцания - ничего сделано это потому, что в алгоритме на 7-ой итерации снова "теряется" едница в случае положительного ответа.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "stdafx.h"
#include "std_lib_facilities.h"
 
int _tmain(int argc, _TCHAR* argv[])
{
    int number=100;
    char answer;
    for(int i=0;i<7;++i)
        {
            cout << "Does your number is bigger than "<< number/2 << " ?\n";
            cin >> answer;
            if(i==5)
                number=number+1;
            if(answer=='y')
                {
                    number=number+100/pow(2,(i+1));
                    if(i==6)
                        number=number/2+1;
                }
                else if (answer=='n')
                        {
                            number=number-100/pow(2,(i+1));
                            if(i==6)
                                number=number/2;
                        }
        }
    cout << "Your number is: " << number << endl;
    return 0;
}
Yandex
Объявления
20.11.2015, 20:59     Компьютер угадывает число
Ответ Создать тему
Опции темы

Текущее время: 12:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru