Форум программистов, компьютерный форум, киберфорум
Наши страницы

помогите понять (генератор чисел) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задачка по С++ http://www.cyberforum.ru/cpp-beginners/thread400734.html
Программа вычисления стоимости покупки с учетом скидки.Скидка предоставляется, если сумма>1000(5%), более 5000(?%), а так же дополнит скидка 3%- в выходные дни. Информация о том является ли день...
C++ Нужна упращенная модель разделения текста по указательным символам Доброго времени суток. Нужна упращенная модель разделения текста (массива) по указательным символам, допустим у нас имеется комманда #run%text.txt - где # указатель что следующий символ что будет... http://www.cyberforum.ru/cpp-beginners/thread400732.html
Сформировать массив из элементов исходного массива, располагающихся по возрастанию C++
например из массива (3 2 4 5 1 3 7 3 4 9 2) должен получиться массив (3 4 5 7 9) т.е. из возрастающих элементов. не могу понять как делать=( Добавлено через 10 минут если можно то на языке...
С++ структура даных очередь C++
привет всем, помогите плиз з кодом С++ , необходимо написать программу на основе абстрактного типа даных очереди. В магазине стоит очередь из m покупателей. Время обслуживания покупателя из...
C++ Модули/двоичная система счисления http://www.cyberforum.ru/cpp-beginners/thread400705.html
Реализовать в виде модуля набор подпрограмм для выполнения следующих операций над натуральными числами в двоичной системе счисления: сложения; вычитания; умножения; деления; перевода из двоичной...
C++ написать 2 программы на С++ Описать рекурсивную функцию Root(X, K, N) вещественного типа, находящую приближенное значение корня K-ой степени из числа X по формуле: Y(0)=1 y(n+1)=y(n)-(y(n)-x/(y(n))^k-1)/k Параметры... подробнее

Показать сообщение отдельно
alkagolik
Заблокирован
07.12.2011, 18:23
Цитата Сообщение от Nuckelavee Посмотреть сообщение
подставляет число, пишет что оно больше/меньше загадоного, сужает рамки поиска, а потом подставляет то же самое число и оно оказывается правильным.
по большому счеты это вас не должно волновать, главное что алгоритм дает результат - значит он верный. Лучше подумать над оптимизацией алгоритма, так сказать доведения его до ума. Начнем сначала:
1. цель: программа должна отгадать число, загаданное пользователем.
2. детали: диапазон чисел задается программой или пользователем (на ваше усмотрение)
3. средства: память для хранения начального и конечного границ диапазона, память для хранения найденного числа, память для хранения и сравнения ответа на заданный вопрос, память для промежуточных значений функция поиска числа, т.е. всего 5 переменных.
Для поставленной задачи сгодится метод половинного деления, согласитесь что инкремент и декремент границ диапазона это мелко, поднимайте планку. Число пользователь просто загадывает в границах диапазона (не вводит в память, а держит в голове) и отвечает на вопросы. Вот код программы, изучайте, дополняйте по своему усмотрению. Можно убрать комментарии (только если сразу оба) и закомментировать строки под ними. У меня непонятки какие-то проявились с кодировками, поэтому я сначала написал так, а когда увидел что незадача, то сменил подход.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
#include <string.h>
 
int search(int beg, int end)
{
    //unsigned char ch;
    unsigned char ch[2];
    int tmp;
 
    tmp = ( end - beg ) / 2;
 
    while ( 1 )
    {
        printf("число равно %i?\n", tmp);
        puts("если да, то нажмите enter, если ваше число больше - нажмите 1, если меньше - 0");
        //ch = getchar();
        gets(ch);
        if ( ch[ 0 ] == '1' )
        {
            beg = tmp;
            tmp = beg + ( (end - beg) / 2 );
        }
        else if( ch[ 0 ] == '0' )
        {
            end = tmp;
            tmp = end - ( (end - beg) / 2 );
        }
        else
            return tmp;
    }
}
 
int main( void )
{
    int x;
    int beg = 0;
    int end = 500;
 
    puts("загадайте число от 0 до 500 включительно");
 
    x = search(beg - 1, end + 1);
 
    printf("ваше число %i\n", x);
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.