Skocz do zawartości

jak najszybsze szukanie liczby


Rekomendowane odpowiedzi

ktos chetny do pomocy ? bo juz nie mam sily ;) jak najszybciej okreslic wartosc $x ?

 

Global $g
Global $sz
Global $n = 1


$x = Random ( 1 , 10 , 1 )
$szukam = Random ( 1 , 10 , 1 )

MsgBox ( 0 , "" , "moja liczba   " & $szukam & " ,    mam znalezc  -> " & $x)

While 1

If $x > $szukam Then
$sz = $szukam + 1
;MsgBox ( 0 , "" , "moja liczba   " & $szukam & " ,   ilosc szukan    " & $n & " ,    mam znalezc  -> " & $x)
$szukam = Random ( $sz , 10 , 1)
;MsgBox ( 0 , "" , "moja liczba   " & $szukam & " ,   ilosc szukan    " & $n & " ,    mam znalezc  -> " & $x)
EndIf




If $x < $szukam Then
$g = $szukam - 1
;MsgBox ( 0 , "" , "moja liczba   " & $szukam & " ,   ilosc szukan    " & $n & " ,    mam znalezc  -> " & $x   )
$szukam = Random ( 1 , $g , 1)
;MsgBox ( 0 , "" , "moja liczba   " & $szukam & " ,   ilosc szukan    " & $n & " ,    mam znalezc  -> " & $x   )
EndIf




If $x = $szukam Then

MsgBox ( 0 , "" , "" & "wybrałes   " & $szukam & " ,  brawo , trafiles !!!   , za   " & $n & "   razem")
;FileWrite("wyniki.txt", "trafione za    " & $n & "   razem" & @CRLF)
$n = 1
Exit
EndIf

WEnd

 

jak wykluczyc liczby juz losowane ?

Edytowane przez adik_123
Odnośnik do komentarza
Udostępnij na innych stronach

$y=1;zaczynasz szukac od 1

$x=5;twoj random np 5 lub jakas inna liczba wieksza-rowna 1

while 1

if $x > $y then $y+=1;jesli x jest wieksza od y to dodaje 1 i szuka dalej itd az do skutku

if $x=$y then msgbox(0,'','x to :'&$y);wiadomo chyba

wend

 

cos takiego??

 

[edit]

juz wiem nie dales

Z$n+=1 w ifach i bylo ze za 1 razem zgadywales...

 

Global $g

Global $sz

Global $n = 1

 

 

$x = Random(1, 10, 1)

$szukam = Random(1, 10, 1)

 

MsgBox(0, "", "moja liczba " & $szukam & " , mam znalezc -> " & $x)

 

While 1

 

If $x > $szukam Then

$szukam += 1

$n += 1

EndIf

If $x < $szukam Then

$szukam -= 1

$n += 1

EndIf

If $x = $szukam Then

 

MsgBox(0, "", "" & "wybrałes " & $szukam & " , brawo , trafiles !!! , za " & $n & " razem")

 

EndIf

 

WEnd

Do
$wiek+=1
Until ŻycieGetMsg() = -3

zbieram +

Odnośnik do komentarza
Udostępnij na innych stronach

Z tym brakujacy $n to pikus , zapomnialem go tu wklepac jak wklejalem kod. Chodzi mi o to zeby komp w jak najmniejszej ilosci prob odgadl liczbe $x = random ( 1 , 10 , 0 ) , przy kazdej probie zgadniecia komp daje wskazowke czy nasza liczba jest > lub < od szukanej $x. Wczoraj bylem zje... i nie mialem juz sily kombinowac. Dzis z tym powalcze i jak mi sie uda to wkleje kod .

 

Dodawaniec o 1 mija sie z celem bo za duzo prob szukania wychodzi.

Edytowane przez adik_123
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli dobrze zrozumiałem, ty losujesz liczbę a następnie program musi ją znaleźc wśród zbioru liczb? Tutaj nadadzą się algorytmy takie jak Poszukiwanie liniowe (zbiór nieuporządkowany)

http://pl.wikipedia.org/wiki/Przeszukiwanie_liniowe

Nie pamiętam już, bo algorytmikę miałem na początku roku ale to jest chyba optymalny rodzaj poszukiwania liczby w zbiorze nieuporządkowanym, natomiast, jesli dysponujesz zbiorem uporządkowanym, to najlepszym wyborem będzie algorytm poszukiwania przez połów noszącego ciekawy sposób działania - "Dziel i zwyciężaj", sposób działania http://pl.wikipedia.org/wiki/Dziel_i_zwyci%C4%99%C5%BCaj

czwartkowy posmak w ustach przypomina
że nie ma sensu owijać w bawełnę
zmarzniętego truchła

przez latarnię ktoś przerzucił sznur
cumuje statek w bezpieczną przystań

czuję jak na skroniach zasycha sól
...

Odnośnik do komentarza
Udostępnij na innych stronach

widać że wy nie ty ty ryty

$wynik = 0
$x = random(20,500,1)
$len = StringLen($x)
for $i = 1 to $len
$result = StringMid($x, $i,1)
$z = 0
Do
$z += 1
until $result = $z
$wynik &= $z
Next
$wynik = StringTrimLeft($wynik, 1)
MsgBox(0, "szukana liczba to:", $wynik)

 

to co pisałem w #8 poście, sprawdza po kolei cyferki

tłumaczenie

stringlen(długość stringa (ile jest cyferek)

stringmid(wyciaga daną cyferke)

stringtrimleft(w tym wypadku usuwa jedną 1 cyferke(przez pętle for dodaje 0 i to nie estetycznie wygląda))

Edytowane przez rumunun
Odnośnik do komentarza
Udostępnij na innych stronach

ok udalo mi sie napisac prawidlowy kod (przynajmniej tak mi sie wydaje) :

 

HotKeySet ( "{esc}" , "stop" )

Func stop ()
Exit
EndFunc

Global $n = 1
Global $a
Global $b
Global $g = 1
Global $sz = 10

$x = Random ( 1 , 10 , 1 )
$moja = Random ( 1 , 10 , 1 )

MsgBox ( 0 , "" , "moja liczba   " & $moja & " ,    mam znalezc  -> " & $x)

While 1

If $moja > $x Then
$sz = $moja - 1
$a = Random ( $g , $sz , 1)
$moja = $a
$n = $n + 1
EndIf

If $moja < $x Then
$g = $moja + 1
$b = Random ( $g , $sz , 1)
$moja = $b ;
$n = $n + 1
EndIf

If $x = $moja Then
MsgBox ( 0 , "" , "" & "wybrałes   " & $moja & " ,  brawo , trafiles !!!   , za   " & $n & "   razem")
FileWrite("wyniki.txt", "trafione za    " & $n & "   razem" & @CRLF)
$n = 1
Exit
EndIf

WEnd

 

Zostal mi jeden problem do rozwiazania. Jak prog juz wyeliminuje wszystkie liczby i zostanie mi np wartosc $g=2 i $sz=2 to jak zrobic zeby $y = random ($g , $sz , 1 ) byla inna niz 0 ?

 

Ok problem rozwiazany. Ustawilem , ze jak $g = $sz to liczba zostala znaleziona.

 

 

 

Kolejny problem : jezeli komp po sprawdzeniu mojej wartosci poinformuje mnie jedynie ze wartosc jest bledna i nie da mi zadnej wskazkowki typu $x > , $x < , jak wyeliminowac ta liczbe z dalszego typowania ? dobrze by bylo zeby to dzialalo z moim kodem. Czekam na Wasza pomoc.

Edytowane przez adik_123
Odnośnik do komentarza
Udostępnij na innych stronach

Kombinuje dlatego ze moja wiedza o docwelowej liczbie jest niewielka. Dostaje jedynie informacje ze liczba ktora podalem jest : > , < , <> . A sprawdzanie kazdej liczby po kolei mija sie z celem bo jest zbyt dlugie. Takze ponawiam pytanie :

jezeli komp po sprawdzeniu mojej wartosci poinformuje mnie jedynie ze wartosc jest bledna i nie da mi zadnej wskazkowki typu $x > , $x < , jak wyeliminowac ta liczbe z dalszego typowania ? dobrze by bylo zeby to dzialalo z moim kodem. Czekam na Wasza pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

Zadeklaruj sobie tablicę, do której będziesz dodawał elementy, które już sprawdziłeś, a potem z pozostałych losował liczbę :)

Pomysł bdb , ale za bardzo nie umiem sie poslugiwac tablicami :/ , przydalbysie jakis tutek albo przyklad.

Ok znalazlem tutki o tablicach , a wiec mam co robic :)

Edytowane przez adik_123
Odnośnik do komentarza
Udostępnij na innych stronach

[F1] ;)

A jeśli nie rozumiesz dalej, to zacznij analizować przykłady z Helpa z użyciem tablic :) Szukaj kogoś kodów z nimi i zobacz jak działają ;) Albo czekaj, aż ktoś napisze tutka do tego :P

Powinien być tut w temacie lokuxd ;) Zaraz sprawdzę i dam edita :)

 

#EDIT

Faktycznie jest :D IV rozdział ;)

http://www.mpcforum.pl/topic/257004-automatyczne-klikanie-co-x-czasu-twoj-klawisz/

Odnośnik do komentarza
Udostępnij na innych stronach

Troche poczytalem na temat tablic i mysle , ze jestem juz troche madrzejszy ;). Taki kodzik sobie zrobilem , jednak jak komp wylosuje dla mnie wartosc 10 to sie error wpier... :/

 

Global $n = 10
Global $ilosc_typowan = 1
Global $a

$x = Random ( 1 , 10 , 1 )

Global $tablica[$n] = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]

$tablica[0] = 1
$tablica[1] = 2
$tablica[2] = 3
$tablica[3] = 4
$tablica[4] = 5
$tablica[5] = 6
$tablica[6] = 7
$tablica[7] = 8
$tablica[8] = 9
$tablica[9] = 10

While 1

$n = $n - 1
$a = Random ( 0 , $n , 1 )

MsgBox ( 0 , "" , "Moja liczba : " & $tablica[$a] & " . Mam znalezc -> " & $x)

If $tablica[$a] <> $x Then
_ArrayDelete($tablica, $a)
ReDim $tablica[$n]
$ilosc_typowan = $ilosc_typowan + 1
EndIf

If $tablica[$a] = $x Then
MsgBox ( 0 , "" , "moja liczba   " & $tablica[$a] & " ,    mam znalezc  -> " & $x & "  , brawo !!! , trafiles za  " & $ilosc_typowan & " razem . Aktualny rozmiar tablicy[" & UBound ($tablica) & "]")
Exit
EndIf
WEnd

 

Co z tym fantem zrobic ?

 

Problem znaleziony , po prostu ostatni if musi zostac przeniesiony w gore bo w niektorych przypadkach byly sprawdzane tablice juz skasowane. Prawidlowy kod :

 

#include <Array.au3>

Global $n = 10
Global $ilosc_typowan = 1
Global $a

$x = Random ( 1 , 10 , 1 )

Global $tablica[$n] = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]

$tablica[0] = 1
$tablica[1] = 2
$tablica[2] = 3
$tablica[3] = 4
$tablica[4] = 5
$tablica[5] = 6
$tablica[6] = 7
$tablica[7] = 8
$tablica[8] = 9
$tablica[9] = 10

While 1
$n = $n - 1
$a = Random ( 0 , $n , 1 )

MsgBox ( 0 , "" , "Moja liczba : " & $tablica[$a] & " . Mam znalezc -> " & $x)

If $tablica[$a] = $x Then
MsgBox ( 0 , "" , "moja liczba   " & $tablica[$a] & " ,    mam znalezc  -> " & $x & "  , brawo !!! , trafiles za  " & $ilosc_typowan & " razem . Aktualny rozmiar tablicy[" & UBound ($tablica) & "]")
Exit
EndIf

If $tablica[$a] <> $x Then
_ArrayDelete($tablica, $a)
ReDim $tablica[$n]
$ilosc_typowan = $ilosc_typowan + 1
sprawdzaj_tablice ()
EndIf
WEnd

Edytowane przez adik_123
Odnośnik do komentarza
Udostępnij na innych stronach

 Udostępnij

  • Ostatnio przeglądający forum jak najszybsze szukanie liczby   0 użytkowników
    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...