輪流取石頭

2021-10-11 11:10:27 字數 591 閱讀 2689

兩個足夠聰明的人玩輪流取石頭的遊戲,誰取到最後乙個石頭誰就贏了,他們一次只能取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個,下面輪到甲了,但是沒有石...