Компьютер угадывает ваш номер (должен быть в 10 попытках) от 1-1000 - PullRequest
1 голос
/ 27 октября 2019

ОК, для начала я начинающий в классе информатики. Я мог бы спросить своего учителя, но у меня нет времени, чтобы сделать это. Итак, ожидайте некоторые действительно глупые ошибки, которые я не вижу, и я использую затмение.

вот мой код:

#include <iostream>
using namespace std;

int something()
{
    int big = 1000;//largest number is 1000
    int small = 1;//smallest number is 1

    //so, best guess is to go in the middle
    int c;//my guesses
    int inequality;//used to write if statements

    for (int a = 0; a <= 10; a++)
    {
        cout << "Think about a number between 1-1000" << endl;//what console tells you
        c = (big - small) / 2;//my guess will be the midpoint of the two numbers
        while (big > small)//while the highest number is ALWAYS greater than the lowest number
        {
            cout << "Is your number less than, equal to, or greater than my guess? 1-less,2-equal,3-greater" << c << endl;
            cin >> inequality;//you tell me whether my guess is too high, low, or equal
            if (inequality == 1)//if you say it is too low...
            {
                small = c;//the smallest number is now my last guess
                c = c - (big - small) / 2;//so, I'll take the midpoint of the CURRENT biggest and smallest number
            }
            else if (inequality == 2)//if you say it is equal...
            {
                cout << "Yay, I guessed your number." << endl;//cool.
            }
            else if (inequality == 3)//if you say it is too high...
            {
                big = c;//biggest number is now my guess
                c = c + (big - small) / 2;//so, I'll take the midpoint of the CURRENT biggest and smallest number
            }
        }
    }
    system("pause");
    return 0;//returns something in int main function
}

int main()
{
    something();//so I can actually do code.
}

Итак, моя проблема:

Если явведите 1 после того, как консоль введет первое предположение, я получу 499, что нормально. После второго предположения (где я ввожу 1) я получаю 249, что тоже хорошо. Однако третье предположение после того, как я ввожу 1, получает случайное значение 681, может ли кто-нибудь мне помочь?

Было бы очень признательно, если бы вы не переписали весь код для меня, иначе это действительно подозрительнокогда я сдаю. Я изо всех сил, потому что у меня не очень хороший опыт в области компьютерных наук, поэтому для улучшения мне нужны в основном идеи. Наконец, любой способ сделать мой код немного более профессиональным был бы признателен:)

Кроме того, мой цикл for может быть немного отключен, я не уверен.

Ответы [ 2 ]

2 голосов
/ 27 октября 2019

Когда вы вычисляете следующее число, вам нужно изменить диапазон

Таким образом, у вас сначала есть

small     guess     big
+---------+----------+

, если пользователь говорит, что он слишком мал, тогда ответ выше предположения, поэтому в диапазонеbig - guess и это то, что вам нужно разрезать пополам, так что вместо

c = c - (big - small)/2

guess = (big - guess) / 2 + guess

если пользователь говорит, что слишком большой, тогда ответ между догадкой и малым

guess = (guess - small) / 2 + small 
2 голосов
/ 27 октября 2019

Попробуйте удалить члены c+ и c - из вычислений средней точки.

Редактировать: также попробуйте поменять местами операторы small = c и big = c в двух условных выражениях.

Ваши комментарии по большей части неверны, и это было моим источником путаницы.

...