Jak znalezc liczbe z zakresu 0 do 100

0

Witam

Problem polega na stworzeniu algorytmu w C++ do znajdywania liczby np. pomyslanej przez uzytkownika z podanego w temacie zakresu. Mozna to oczywiscie zrobic mnostwem petli if i za max 7 razem zawsze sie zgadnie. Aplikacje zadaje pytanie czy dana liczba jest mniejsza, wieksza czy rowna (zakladajac ze np. jest to 0) 50, 25, 12, 6, 3, 1, 0.

Myslalem tez nad innym sposobe np. uzyc 3 zmiennych max, mid i min i odpowiednio nimi operowac po odpowiedzi uzytkownikac np (pomyslana liczba niech bedzie 30):

max=100
mid=50
min=0
Czy liczba jest mniejsza, wieksza, rowna mid? (odp. m)
max=50
mid=max/2=25
min=0
Czy liczba jest mniejsza, wieksza, rowna mid? (odp. w)
max=50
mid=(max-mid)/2+min=37
min=max/2=25
Czy liczba jest mniejsza, wieksza, rowna mid? (odp. w)
itd.

Ale uwazam ze nie jest to najlepszy algorytm.

Czy jest jakies moze bardziej uniwersalne rozwiazanie tego problemu?

0

tak. petla while.

0

A niby jaki warunek zakonczenia petli mam uzyc skoro nie wiem jaka liczbe pomyslal gosc testujacy program?

0

przecież pytasz, czy liczba jest równa. wystarczy sprawdzić odpowiedź.
ewentualnie zawsze kończyć po siedmiu krokach, lub - bardziej ogólnie - kiedy krok pomiędzy kolejnymi iteracjami będzie równy 1.

0

Oto moje rozwiązanie:

int main ()
{
system ("chcp 1250");
int max=100;
int mid=50;
int min=0;
char znak='0';
cout<<"Czy pomyślana liczba jest r-równa, m-mniejsza, w-większa od: "<<mid<<"? ";
cin>>znak;
if (znak == 'm' || znak == 'M')
{
max=50;
mid=25;
}
else if (znak == 'w' || znak == 'W')
{
min=50;
mid=75;
}
else if (znak == 'r' || znak == 'R')
cout<<"Pomyślaną liczbą jest: "<<mid<<endl;

cout<<"Czy pomyślana liczba jest r-równa, m-mniejsza, w-większa od: "<<mid<<"? ";
cin>>znak;
while (znak !='r' || znak !='R')
{
	if (znak == 'm' || znak == 'M')
	{
		int temp=mid;
		mid=((max-mid)/2)+min;
		max=temp;
		cout<<"Czy pomyślana liczba jest r-równa, m-mniejsza, w-większa od: "<<mid<<"? ";
		cin>>znak;
	}
	else if (znak == 'w' || znak == 'W')
	{
		int temp=mid;
		min=mid;
		mid=((max-min)/2)+min;
		cout<<"Czy pomyślana liczba jest r-równa, m-mniejsza, w-większa od: "<<mid<<"? ";
		cin>>znak;
	}
	else if (znak == 'r' || znak == 'R')
	{
		cout<<"Pomyślaną liczbą jest: "<<mid<<endl;
		break;
	}
}

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1