- Help_me_please.png (104.81 KiB) Прегледано 1050 пъти
pal702004 написа:ammornil, в заданието се иска програмата да "отгатва" намисленото от Ели число, а вие сте написал програма за Ели. За не повече от 10 опита, което е нормално, понеже $2^{10}=1024$
Програмата извежда число и чака отговор "Correct","Larger" или "Smaller". При Correct, или след 10-ият опит - край.Не мисля, че разбирам как програма ще отгатва число, което не е зададено никъде в електронна форма.
import random
choice = 'y'
while (choice == 'y'):
choice = input('Do you wish to play a game (y/n): ')
if (choice == 'n'):
break
else:
counter = 0
goal = random.randint(1,1000)
while counter<10:
try:
print('Attempt ',counter+1,' of 10')
yourGuess = int(input('Please guess a whole number between 1 and 1000: '))
except Exception:
print('Invalid input.')
break
if (yourGuess > 1000):
print('Pay attention! Guessed number cannot be larger than 1000.')
break
if (yourGuess == goal):
counter = 11
print('Correct!')
break
elif (yourGuess < goal):
print('Smaller.')
counter+=1
elif (yourGuess > goal):
print('Larger')
counter+=1
else:
print('Invalid input.')
counter+=1
if (counter == 10):
print('Wrong Answer. Game over. The correct answer was ',goal)
Гост написа:Аз съм този, който пусна задачата. Пуснах я защото нямам никаква идея как да я реша?
Задачата е от тук:
https://action.informatika.bg/games/numberguessing
#include <bits/stdc++.h>
using namespace std;
int main()
{
int guess = 0, nachalo = 1, krai = 1000;
string s = "Smaller.";
while (1)
{
if (s == "Correct!")
{
break;
}
else
{
if (s == "Smaller.")
{
nachalo = guess + 1;
guess = (krai + nachalo) / 2;
}
else
{
krai = guess - 1;
guess = (krai + nachalo) / 2;
}
}
cout << guess << flush << endl;
cin >> s;
}
return 0;
}
pal702004 написа:Глупости! ВИЕ трябва да отгатвате числото. Вие!
За целта трябва да си напишете програма, която да ви помогне за това. Като въвеждате отговорите на Ели (Correct и т.н). Няма никакво програмиране в това да се генерира случайно число, как не разбирате.
Програмата трябва да реализира т.нар. дихотомен метод (делене на интервала на половина). Примерно решение: Трябва да се поддържат 2 променливи (MinV и MaxV), между които е търсеното число.
Начални стойности: MinV:=0,MaxV:=1001
След това в цикъл докато (MaxV-MinV>1) или (има отговор Correct)
Choise:=(MinV+MaxV)\2 (целочислено делене на 2, предлага се средата на интервала)
Предлагаме Choise (тоест, първото ни предложение винаги е 500)
Ако отговора е Correct - ясно
Ако е Larger, MaxV:=Choise (интервала се съкращава от 0 до 500)
Ако е Smaller, MinV:=Choise (интервала се съкращава от 500 до 1001)
край на цикъла
Така отначало интервала е с големина 1000, Ако не се познае, след първия избор се съкращава до 499, след втория - 249, третия-124, четвъртия - 62,петия -31, шести - 15, седми - 7, осми -3, девети - 1. И най-много на десетия го познаваме.
Синоними са. Bisection method, interval halving method, the binary search method, the dichotomy method.nick написа:Този дихотомен метод. Прилича малко на двойчно търсене.
Регистрирани потребители: Google Adsense [Bot], Google [Bot]