這題需要在時間限制內贏100次二分猜數遊戲。
記得資料結構課上老師就說過,二分查詢的實現還是很容易錯的。一開始寫的版本總是用光次數猜不對。
網速比較慢的話就得先用其他題的賬戶登上去然後本地連線到9007埠執行。
from pwn import
*sh = remote(
'pwnable.kr'
,9007
)sh.recvuntil(
'starting in 3 sec'
)print
'waiting for 3 sec to start ...'
defplay_round()
: sh.recvuntil(
'n='
) n =
int(sh.recvuntil(
' ')
)print
'n=%d'
% n sh.recvuntil(
'c='
) c =
int(sh.recvuntil(
'\n'
).replace(
'\n',''
).rstrip())
print
'c=%d'
% c # binary search
lo =
0 hi = n-
1 cnt =
0 re =-1
while lo < hi:
cnt +=
1 mi = lo +
(hi - lo)/2
guess =
' '.join(
[str
(i)for i in
range
(lo, mi+1)
])# print 'test #', cnt, 'range: [%4d, %4d]' % (lo, hi), 'guess: [%4d, %4d]', lo, mi
sh.sendline(guess)
re =
int(sh.recvline())
# print 'ret:', re
if re <10*
(mi - lo +1)
: hi = mi
else
: lo = mi+
1while cnt < c:
cnt +=
1 sh.sendline(
str(lo)
) re =
int(sh.recvline())
print
'aha! found:'
, lo,
'sending...'
sh.sendline(
str(lo)
)print sh.recvuntil(
'\n'
)# receive "congraduate (#round_number)"
win =
0while win <
100:
play_round(
) win +=
1sh.interactive(
)
猜數字遊戲,二分查詢 ,輸密碼遊戲
1.完成猜數字遊戲 首先這個 要先理解他如何猜數字。不可能是在 中寫乙個數,你來猜它吧。所以你得有乙個可以產生隨機數的函式。也就是rand 所以接下來就好寫了。只要通過迴圈比較來告訴它值低了 還是 高了 我是通過函式來實現的,乙個輸出函式,乙個遊戲函式。結合起來。define crt secure ...
猜數字遊戲 二分查詢顯威力
規則就像剛才說的一樣,現在開始猜數字,假設待猜數字為57,讓我們先用之前的猜法試一下,乙個乙個猜,從1開始,這樣猜的話,最少得猜57次,6要是99的話,得猜99次,現在讓我們試一下從中間開始的猜法。從50開始,則猜數過程如下 50 小了 75 大了 63 大了 57 猜對了 從以上過程可以看出,從中...
1 猜數字遊戲 2 二分查詢 3 模擬使用者登入
猜數字遊戲 void eumn void game else if num tem else intmain else if choice 0 else while 1 system pause return0 二分查詢,找到了返回該數字的下標 intbinarysearch int arr,int...