Как сделать функции для угадывания обратного числа игры? - PullRequest
1 голос
/ 18 марта 2020

Для моего задания мне нужно создать программу, которая угадывает номер пользователя, от 1 до 19 включительно, в течение 5 попыток. Для каждой попытки пользователь вводит, если число: а) правильное, б) слишком высокое или c) слишком низкое

Мы должны определить две функции:

  • Первая - это функция, которая принимает число (int) в качестве параметра и выводит подсказку пользователю, который угадывает это число (сообщает пользователю "Is this your number: <guess>"), и показывает им меню, которое объясняет, как ввести правильный, высокий или низкий.

  • Вторая функция должна вычислять следующее предположение после того, как будет сказано, является ли она слишком высокой или слишком низкой.

Я смог выполнить sh это с помощью вложенных switch операторов, но у меня возникли проблемы при попытке найти вторую функцию.

Любая помощь приветствуется. Я попытаюсь прикрепить свою первую программу с помощью операторов switch. Я предполагаю, что мне нужно сгенерировать случайное число с min и max, но я не уверен, как это сделать.

#include<iostream>
using namespace std;

int main()
{
    int guess = 10;
    int input = 0;
    cout<<"Is this your number: "<< guess<<endl;
    cout<< "Correct? (1), High?(2), Low(3)"<<endl;
    cin>> input;
    switch(input) {
        case(1):
            cout<< "Thanks for playing";
            break;
        case(2):
            guess = 5;
            cout<<"Is this your number: "<< guess<<endl;
            cout<< "Correct? (1), High?(2), Low(3)"<<endl;
            cin>> input;
                switch(input){
                    case(1):
                        cout<< "Thanks for playing";
                        break;
                    case(2):
                        guess = 3;
                        cout<<"Is this your number: "<< guess<<endl;
                        cout<< "Correct? (1), High?(2), Low(3)"<<endl;
                        cin>> input;
                        switch (input){
                            case(1):
                                cout<< "Thanks for playing";
                                break;
                            case(2):
                                guess = 2;
                                cout<<"Is this your number: "<< guess<<endl;
                                                       cout<< "Correct? (1), High?(2), Low(3)"<<endl;
                                                       cin>> input;
                                switch(input){
                                    case(1):
                                        cout<< "Thanks for playing";
                                        break;
                                    case (2):
                                        guess = 1;
                                        cout<< "Your guess was: "<<guess<<endl;
                                        break;
                                    case (3):
                                        cout<< "Cheater..."<<endl;
                                        break;
                                }
                                break;
                            case(3):
                                guess = 4;
                                cout<< "Your guess was: "<<guess<<endl;
                                break;

                              }
                        break;
                    case(3):
                        guess = 7;
                        cout<<"Is this your number: "<< guess<<endl;
                        cout<< "Correct? (1), High?(2), Low(3)"<<endl;
                        cin>> input;
                        switch (input){
                            case (1):
                                cout<< "Thanks for playing";
                                break;
                            case(2):
                                guess = 6;
                                cout<< "Your guess was: "<<guess<<endl;
                                break;
                            case(3):
                                guess = 8;
                                cout<<"Is this your number: "<< guess<<endl;
                                cout<< "Correct? (1), High?(2), Low(3)"<<endl;
                                cin>> input;
                                switch (input){
                                        case (1):
                                        cout<< "Thanks for playing";
                                        break;
                                        case(2):
                                        cout<<"Cheater..."<<endl;
                                        case(3):
                                        guess = 9;
                                        cout<< "Your guess was: "<< guess<<endl;
                                        break;
                                }
                        }

                        break;
                }
            break;
        case(3):
            guess = 15;
            cout<<"Is this your number: "<< guess<<endl;
            cout<< "Correct? (1), High?(2), Low(3)"<<endl;
            cin>> input;
                switch(input){
                    case(1):
                        cout<< "Thanks for playing";
                        break;
                    case(2):
                        guess = 13;
                        cout<<"Is this your number: "<< guess<<endl;
                        cout<< "Correct? (1), High?(2), Low(3)"<<endl;
                        cin>> input;
                        switch (input){
                            case(1):
                                cout<< "Thanks for playing";
                                break;
                            case(2):
                                guess = 12;
                                cout<<"Is this your number: "<< guess<<endl;
                                                       cout<< "Correct? (1), High?(2), Low(3)"<<endl;
                                                       cin>> input;
                                switch(input){
                                    case(1):
                                        cout<< "Thanks for playing";
                                        break;
                                    case (2):
                                        guess = 11;
                                        cout<< "Your guess was: "<<guess<<endl;
                                        break;
                                    case (3):
                                        cout<< "Cheater..."<<endl;
                                        break;
                                }
                                break;
                            case(3):
                                guess = 14;
                                cout<< "Your guess was: "<<guess<<endl;
                                break;
                              }
                        break;
                    case(3):
                        guess = 17;
                        cout<<"Is this your number: "<< guess<<endl;
                        cout<< "Correct? (1), High?(2), Low(3)"<<endl;
                        cin>> input;
                        switch (input){
                            case (1):
                                cout<< "Thanks for playing";
                                break;
                            case(2):
                                guess = 16;
                                cout<< "Your guess was: "<<guess<<endl;
                                break;
                            case(3):
                                guess = 18;
                                cout<<"Is this your number: "<< guess<<endl;
                                cout<< "Correct? (1), High?(2), Low(3)"<<endl;
                                cin>> input;
                                switch (input){
                                        case (1):
                                        cout<< "Thanks for playing";
                                        break;
                                        case(2):
                                        cout<<"Cheater..."<<endl;
                                        case(3):
                                        guess = 19;
                                        cout<< "Your guess was: "<< guess<<endl;
                                        break;
                                }
                        }

                        break;
                }
            break;
    }

    return 0;
}

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Попробуйте:

#include <iostream>
using namespace std;
#define elif else if

void guessf(int guess) {
    cout << "Is this your number: " << guess << endl << "Correct? (1), High?(2), Low(3)" << endl;
}

int main(){
    unsigned int range = 10, guess = 10, input = 0, i = 0;
    while (i < 5 && input != 1) {
        guessf(guess);
        cin >> input;
        if (range > 1)
            range /= 2;
        else
            range = 1;
        if (input == 1)
            cout << "Thanks for playing";
        elif (input == 2)
            guess -= range;
        else
            guess += range;
    }
}

Что это делает : guessf() довольно просто, поэтому мы переходим к main(), переменная range это то, что она делает будет добавляться или вычитаться из guess при каждой попытке, затем, пока ваша программа не выполнит 5 попыток или guess верна, спросите пользователя, является ли она правильной, высокой или низкой, если она правильной cout << "Thanks for playing";, если guess - высокое, вычтите range, а если guess - низкое, добавьте range к guess. Также мы имеем дело с int, минимальное значение range должно быть 1, если оно ниже, ничего не будет добавлено или вычтено из guess. По крайней мере, этот метод похож на «Бинарный поиск»

Если вы хотите удалить elif, удалите #define elif else if и замените elif на else if (else и if в той же строке)

Также под 2 функциями вы подразумеваете 2, включая основную или без? Это важно знать

0 голосов
/ 18 марта 2020

Вот некоторые наблюдения:

  • Набор задач состоит из чисел от 1 до 19, т. Е. Диапазона [1, 19].
  • Необходимо найти указанное число / предположил в этом диапазоне.
  • Диапазон фиксирован, т.е. он всегда будет [1, 19]. Это означает, что это отсортированный диапазон.
  • Число попыток угадать число равно 5.

Итак, с учетом вышеуказанных характеристик, Алгоритм двоичного поиска обеспечит оптимальное решение, например:

  • Диапазон = [1, 19]
  • Нет. попыток = 5
  • Наихудшая производительность алгоритма бинарного поиска = O(log n)
  • т.е. диапазон = 19, O (log n) = O (log 19) = 4.25 = ~ 5 попыток

Вы можете изучить алгоритм двоичного поиска, чтобы ознакомиться с ним. Остальные будут вашими логиками c поддержания high, low и mid очков. И для этого вам не нужны случайные числа!

Вы будете использовать свой собственный вариант алгоритма двоичного поиска, который угадывает число, корректируя набор задач, то есть диапазон, в котором число может существовать.


Что касается двух ваших функций:

  1. Первая функция будет отображать меню и вводить предполагаемый номер.
  2. Вторая функция будет выполнять догадка.

Для остальной части шаблонной логики c вы можете реализовать это в своей функции main().

Вот общая разбивка вашего кода (просто краткий обзор, если вы используете C ++ 98 или C ++ 03):

int showMenuAndInputNumber() { /* ... */ }
int guessNumber(const int n) { /* ... */ }

int main()
{
    const int n = showMenuAndInput();

    // validate if n is in the range [1, 19]

    // given the search sorted range and the valid number,
    // then using Binary search you'll need max 5 tries
    // so, you don't need to keep track of the tries
    // but, for simplicity, you can use tries

    const int tries = 5;
    for ( int t = 0; t < tries; ++t )
    {
        // guess the number here
        // adjust the range either right or left
        // according to your own Binary search algorithm's variation
    }

    return 0;
}

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

Надеюсь, это поможет!

...