兩個足夠聰明的人玩輪流取石頭的遊戲,誰取到最後乙個石頭誰就贏了,他們一次只能取1個、3個、7個或8個石頭,寫一程式判斷n個石頭時先取的人是輸還是贏。
輸入格式:
乙個整數n,其值不超過10000000。
輸出格式:
如果先取的人贏,請以單獨一行輸出1,否則輸出0。
輸入樣例:
這裡是3組輸入。
輸出樣例:
上面3組資料對應的輸出分別如下:
(1)分析
建立陣列a[i]代表取石頭的人面臨i個石頭時會輸還是贏,a[i]=1代表會贏,由題意得a[1]=a[3]=a[7]=a[8]=1。如果取石頭的人取完石頭後不能給對手留下必輸的情況,那就是給對手留下了必贏的情況,a[i]置0。否則a[i]置1。迴圈將陣列每個位賦上值,最後a[n]就是n個石頭時先取的人是輸還是贏。
時間複雜度:o(n)
(2)**及執行
#include
using namespace std;
int a[10000010]=;
int main(
) cout<
}
取石頭的問題
n個石頭,2個人依次只能取1 3 4個石頭,取到最後乙個石頭者贏。判斷第乙個取的人是否會贏。下面的 在時間複雜度上還有很嚴重的問題,n為2位數時還好,大於100直接蹦掉了,希望有大牛給修正下。不過這個題也可以先算出來規律,然後一行 搞定 對於這種取法,除以7餘0或者除以7餘2時,先取的人都會輸,其他...
7 2 取石頭遊戲
兩個足夠聰明的人玩輪流取石頭的遊戲,誰取到最後乙個石頭誰就贏了,他們一次只能取1個 3個 7個或8個石頭,寫一程式判斷n個石頭時先取的人是輸還是贏。乙個整數n,其值不超過10000000。如果先取的人贏,請以單獨一行輸出1,否則輸出0。這裡是3組輸入。110300上面3組資料對應的輸出分別如下 11...
36 取石頭 10分
題目內容 有甲乙兩個人玩取石子遊戲,共有n個石子 1 n 30000 兩個人輪流取,甲先取.每次最多取m個 1 m 30000 最少取乙個,當輪到誰取的時候沒有石子了,誰就贏.比如4個石子,每次最多取3個,那末先取的人 甲 一定贏n和m誰大沒有限制.甲拿走3個,乙隻拿走1個,下面輪到甲了,但是沒有石...