GL 遊戲演算法(附原始碼)

2021-06-05 16:46:32 字數 2024 閱讀 6505

gl遊戲規則:

有個列相當長的格仔(格仔總數不超過10的四次方),某些格仔裡面放了棋子(棋子總數足夠多)

1.如果格仔裡面有棋子,就可以少拿走其中一顆,同時在這個格仔的左邊兩個格仔裡面各放一顆;

2.如果連續兩個格仔裡面都有棋子,可以分別從兩個格仔中都拿走一顆,並在她們右邊的格仔裡面放入一顆

輸入初始狀態,反覆使用規則1,2

輸出終止狀態(停機狀態)

一. 每個格仔至多只有一顆棋子

二. 相鄰兩個格仔不能都有棋子

例如下圖,格仔裡面的棋子數分別為為:2,3,5 ;終止狀態為1, , ,1, , , , ,1

這是一道acm的程式書上看到的一道題,當時書上面說的是用 斐波那契 數列來求解,此步驟簡單,但是只能求得最後結果,不能得出每一步的步驟

筆者通過反覆讀取題意,根據題意想出乙個演算法,可以求得每一步的格局

具體演算法如下:

第乙個數為零

一。.第二個數》1

1。第三個數為零,則第二個數左移動 例如:0050 -> 1140

2。第三個數不為零

(1)第四個數為零,第

二、三個數右移 例如:0520 ->0411

(2)第四個數不為零,第

三、四個數右移動 例如:05220 ->05111 05221->05112

二。第二個數為1

. 1。第三個數為零,跳過本輪迴圈

. 2。第三個數不為零,

一直找到下乙個不為1的數k

(1)數k為0,數k前兩個數右移 例如:0111110 ->0111001

(2)數k大於1

1)數k下乙個數為零,數k與其前乙個數右移

例如:0111120 ->0111011 (2是k)

2)數k下乙個數不為零

1*。數k下乙個數的下乙個數為零,數k與其下乙個數右移

例如:0111121->01111101 (2是k)

2*。數k下乙個數的下乙個數不為零,

數k下乙個數與其下乙個數的下乙個數右移

例如:011112130 ->011112021 (2是k)

對棋子數不斷用以上方法,就可以得到最後要求的終止狀態

相關**:

01.#include"stdio.h"

02.#define m 40 //旗盤長度

03.#define n 20 //棋子放在旗盤的位置

04.int qi[m]; //儲存每個格仔裡面的棋子

05.06.void show() //顯示當前狀態下的棋子的格局

07.63. if(qi[i+1] == 0) //當下乙個數i+1為零,則數i-1和i右移

64.

70. else //當下乙個數i+1大於1

71.

77. if (qi[i+2] == 0)//當下乙個數的下乙個數i+2為零,i與i+1右移

78.

84. qi[i]--;

85. qi[i+1]--;

86. qi[i+2]++;

87. i = i + 2;

88. }

89. else // 當下乙個數的下乙個數i+2不為零

90.

98. else //當下乙個數的下乙個數的下乙個數不為零,i+2與i+3右移

99.

105. }

106. }

107. show();

108. }//else if (qi[i] == 1)

109. }//for (int i=2; i1 || ((qi[i]==1 && qi[i-1]!=0) || (qi[i] == 1 && qi[i+1]!=0))) //如果到達終止狀態

118.

122. }

123.

124. }//while (temp)

125.}

126.

127.int main()

128.{

129. int chang; //儲存棋子的總長度

130. for(int i=0; i分類: 部落格徵文專欄, 遊戲

貪吃蛇遊戲(附原始碼)

貪吃蛇遊戲,現在還有很多bug。等待大家挑錯。難度 1最難,500最簡單。吃夠20個食物就可以過關了 呵呵。無聊時候玩玩吧 include include include include const int maxn 100 const int n 20 struct node int map ma...

貪吃蛇遊戲(附原始碼)

貪吃蛇遊戲,現在還有很多bug。等待大家挑錯。難度 1最難,500最簡單。吃夠20個食物就可以過關了 呵呵。無聊時候玩玩吧 include include include include const int maxn 100 const int n 20 struct node int map ma...

CAS詳解附原始碼

cas 也就是compareandswap 比較並交換,主要為了解決多執行緒下的原子性,大體思想就是在更新前,進行比較,舉個例子atomicinteger 下的compareandset expect,update expect 為期望值也就是未更新的值,update是如果期望值相同則更新的值。首先...