Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Игра: Угадай число. / 6 сообщений из 6, страница 1 из 1
12.06.2014, 15:40
    #38668470
Ivan123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Игра: Угадай число.
Напишите программу, которая будет уметь играть (за любого из игроков) в такую игру. Один игрок загадывает натуральное число от 1 до N, другой должен его отгадать, задавая вопросы вида «это число ....?» и получая одну из ответов «да», «загаданное число бульше» или «загаданное число меньше». Программа имеет играть оптимально (угадывать за наименьшее количество вопросов, т.е. нужно использовать бинарный поиск).
мне надо написать условие: Программа должна работать корректно, не зависимо от того, оптимальным образом ставит вопрос игрок человек. Если игрок-человек дал противоречивые ответы (например, один раз сказал, что число более 100, а через несколько ходов, что меньше 101), программа должна подробно об этом рассказать.

Код
Код: plaintext
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.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
#include "iostream" 
#include "cstdlib"  
#include "ctime" 
#include <cmath>

using namespace std;

int comp () 
{	
	srand (unsigned int(time(0))); 

	int i = rand()%100;	 
	while (true)
	{ 
		cout << "Я загадал число от 0 до 100, какое?" << endl; 
		int j;
		cin >> j;
		if (i > j)
		{
			cout << "Мое число больше" <<endl;
		}else {
			if (i < j)
				cout << "Мое число меньше" << endl;
			else 
			{
				cout << "Ура!!! ТЫ угадал!!!!" << endl;
				break;
			}

		}


	}
	return 0;

}

float f(float x)
{
	cout << (int)x << endl;
	cout << "Правильно ( + / - / = )? ";
	char c;
	cin >>  c;
	while (true)
	{
		switch (c)
		{
		case '+': return +1;
		case '-': return -1;
		case '=': return 0;


		}
		cout << "Вы ввели неправвильный символ, повторите попытку!!" <<endl;
	}
}
float n(float x1, float x2)
{
	float x = (x1+x2)/2;
	float b=x;
	float c=x+1;
	float y = f(x);
	while (abs(y)> 0.001)
	{
		if (y>0)
			x1=x;
		else 
			x2=x;
		x=(x1 + x2) / 2;
		y=f(x);
	}
	return x;
}
int computer ()
{
	cout << "Загадайте число от 0 до 100!!!!" << endl;
	cout << "Вы загадали число : " << (int) n(0,100) << endl;
	return 0;
}
int main ()
{
	setlocale(LC_ALL, "Russian");
	bool done;
	cout << "                    Представляем к вашему вниманию игру:" << endl;
	cout << "                                УГАДАЙ ЧИСЛО" << endl;
	cout << "                               И так поехали!!!!!!" << endl;
	cout << "                                                                                 " << endl;
	do
	{
		cout << "Выберите тип игры (компьютер (отгадывает) - игрок(1); игрок (отгадывает) - компьютер(2))" << endl;
		int k;
		cin >> k;
		if (k==1)
		{
			computer ();
		} else {
			if (k==2)
			{
				comp ();	
			}else
				cout << "Вы ввели неправильный символ, пожалуйста повторите попытку!!!" << endl;
		}		

		cout << "Вы желаете продолжить(y/n)?";
		char c;
		cin >> c;
		done =(c!='y');
	} while (!done );  
	return 0;
}


помогите пожалуйста буду очень благодарен.....
...
Рейтинг: 0 / 0
12.06.2014, 18:34
    #38668574
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Игра: Угадай число.
Ivan123мне надо написать условие: Программа должна работать корректно, не зависимо
от того, оптимальным образом ставит вопрос игрок человек. Если игрок-человек дал
противоречивые ответы (например, один раз сказал, что число более 100, а через несколько
ходов, что меньше 101), программа должна подробно об этом рассказать.
Во-первых, у тебя неправильно сдвигаются границы. х1 должно иметь новое значение на
единицу больше х, а х2, соответственно, меньше. Тогда это условие становится тривиальным:
если x1>x2, то игрок где-то солгал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.06.2014, 07:53
    #38669988
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Игра: Угадай число.
Ivan123,

Слова " загадывает натуральное число от 1 до N, " тебе о чем-нибудь говорят?
...
Рейтинг: 0 / 0
16.06.2014, 21:29
    #38670979
Ivan123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Игра: Угадай число.
Dimitry Sibiryakov, а почему границы не правильно у меня то сдвигаются, оно все равно не выводит результат тот что мне нужен
...
Рейтинг: 0 / 0
16.06.2014, 22:50
    #38671028
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Игра: Угадай число.
Ivan123а почему границы не правильно у меня то сдвигаются
Потому что ты их неправильно сдвигаешь, это же очевидно. Какое слово из "х1 должно иметь
новое значение на единицу больше х, а х2, соответственно, меньше" тебе непонятно?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
17.06.2014, 22:25
    #38672399
Ivan123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Игра: Угадай число.
Dimitry Sibiryakov, да спасибо тебе огромное, ты меня очень выручил
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Игра: Угадай число. / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]