NYOJ 88 漢諾塔(一)

2021-07-09 23:15:03 字數 1091 閱讀 8792

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:3 描述

在印度,有這麼乙個古老的傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸於盡。

現在請你計算出起始有m個金片的漢諾塔金片全部移動到另外乙個針上時需要移動的最少步數是多少?(由於結果太大,現在只要求你算出結果的十進位制位最後六位)

輸入

第一行是乙個整數n表示測試資料的組數(0輸出

輸出把金片起始針上全部移動到另外乙個針上需要移動的最少步數的十進位制表示的最後六位。

樣例輸入

2

11000

樣例輸出

1

思路:

對於漢諾塔求移動次數公式為f(n+1)=f(n)*2+1;

此題如果用要求十進位制最後六位,f(n+1)=(f(n)*2+1)%100000;

每次輸入層數,求出移動次數,但如果輸入資料很大,利用此公式必定超時,經過多次測試,發現若輸入資料大於100005,有如下規律,如:

f(123456)=f(23456); f(123456789)=f(23456789)---=f(56789)

即略去最高位,

但 if(m%100000<6)則需進行此操作 m=100000+m%10;

即f(100000003)=f(100003);

ac**:

#include using namespace std;

int num[100010];

int main()

scanf("%d",&x);

while(x--)

printf("%d\n",num[n]);

} return 0;

}

nyoj 88 漢諾塔(一)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個...

NYOJ 88 漢諾塔(一)

思路1 對於漢諾塔求移動次數公式為f n 1 f n 2 1 此題如果用要求十進位制最後六位,f n 1 f n 2 1 100000 每次輸入層數,求出移動次數,但如果輸入資料很大,利用此公式必定超時,經過多次測試,發現若輸入資料大於100005,有如下規律,如 f 123456 f 23456 ...

nyoj 88漢諾塔(一)(快速冪)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在印度,有這麼乙個古老的傳說 在世界中心貝拿勒斯 在印度北部 的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有乙個...