JZOJ 7 15C組第三題 漢諾塔

2021-08-21 11:35:31 字數 823 閱讀 6899

簡單的漢諾塔問題,改了一下規則:不能把盤子從1號柱上直接移到3號柱上,也不能把盤子直接從3號柱上移到1號柱上。現在給出盤子的數量,判斷它第m個狀態時每個盤子都在哪個柱上(初始狀態算0)。

這題正解比較神奇。但是我們可以用另一種方法,根據打表,我們能發現,當n為3時,狀態從0到27分別為:

1 1 1

2 1 1

3 1 1

3 2 1

2 2 1

1 2 1

1 3 1

2 3 1

3 3 1

3 3 2

2 3 2

1 3 2

1 2 2

2 2 2

3 2 2

3 1 2

2 1 2

1 1 2

1 1 3

2 1 3

3 1 3

3 2 3

2 2 3

1 2 3

我們可以發現,第乙個數字是按123321來變化的,第二個數字是按111222333333222111來變化的,以此類推,所以我們可以讓m每次%6,輸出相應的數字,再讓它/3,(考試找到了規律沒時間打了)。

#include

#include

#include

using

namespace

std;

int t,n,m,k,ans[6]=;

void read(int &tot)

int main()

printf("\n");

}}

JZOJ 7 7C組第三題 頁

給出奇數個數,每次把它中間的數取出來放到最左邊或最右邊,求出最少取多少次可以讓這些數是從小到大的。bfs hash判重。每次左邊右邊操作一次,判斷之前有沒有出現過了,沒有就入隊。include define maxn 300017 using namespace std int n,state 10...

三引數的漢諾塔c程式

在計算機語言中,漢諾塔是遞迴呼叫的經典例子,然而現有的程式基本上都是使用4個引數項進行遞迴呼叫,即塔層數和原在塔座 借助塔座 目標塔座。程式雖然簡潔,但感覺不夠清晰,以c語言為例,如定義函式為void hanoi int n,char x,char y,char z 呼叫代入為 hanoi m,a,...

JZOJ 7 9C組第三題 排列的編碼

給出乙個長度為n序列,求出它在n的全排列中是第幾個。這道題要找規律,設ml i ml i 為第i i 位後面有幾個數比第 i role presentation style position relative i i位小,通過一系列操作 詳見某蒟佬 可以得到答案an s an s ml i n i ...