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是如果期望值相同則更新的值。首先...