前幾天z老師給我們把歷年noip普及組的數論題都找了出來 說真的 目前對於高精度還一竅不通的我 有些題真心不會 但是最後看看**才發現 我基本上都沒用到高精..
例如這個題 正解確實要用高精 但是我還是沒有..我的做法已經在洛谷oj發布了題解
題目
hanoi雙塔問題【noip普及組】2007t4 [難度]普及組題目不評級 [標籤]《高精》《遞推》《遞迴》《數論數學》 (洛谷搜尋p1096 1s128mb)
hanoi雙塔問題
要點:首先要建立遞推關係式
題目描述
給定a、b、c三根足夠長的細柱,在a柱上放有2n個中間有孔的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的(下圖為n=3的情形)。
現要將這些圓盤移到c柱上,在移動過程中可放在b柱上暫存。要求:
(1)每次只能移動乙個圓盤;
(2)a、b、c三根細柱上的圓盤都要保持上小下大的順序;
任務:設an為2n個圓盤完成上述任務所需的最少移動次數,對於輸入的n,輸出an。
輸入輸出格式
輸入格式:
輸入檔案hanoi.in為乙個正整數n,表示在a柱上放有2n個圓盤。
輸出格式:
輸出檔案hanoi.out僅一行,包含乙個正整數, 為完成上述任務所需的最少移動次數an。
輸入輸出樣例
輸入樣例:① 1 ②2
輸出樣例:① 2 ②6
說明
【限制】
對於50%的資料,1<=n<=25
對於100%的資料,1<=n<=200 //這麼小 暴力就是了[滑稽
我們可以用乙個num陣列來儲存答案且num[1]代表個位 往後類推
#include
using
namespace
std;
#define size 100001
int num[size];
int n,len=1;
//coyg
n是我們要輸入的數字 len代表輸出答案的長度 首先要初始化
num[1]=1;
一定要注意 不要把num[1]初始為2 往後看你就會明白
然後就是記錄移動
for(int i=1;i<=n;i++)
這裡我們需要弄乙個函式record來記錄
void record()
else}}
}//coyg
呼叫了n次之後 我們好像已經計算出了n個塔移動的次數 但是如果我們此時輸入 3 輸出的答案應該是7 可卻是8
原因是之前我們個位多加了一次 於是
num[1]-=1;
然後再執行一遍record獲得2n的數量
最後倒敘輸出
全**如下
#include
using
namespace
std;
#define size 100001
int num[size];
int n,len=1;
void record()
else}}
}int main()
for(int i=len;i>=1;i--)
差不多就這樣 當然普及組的題很簡單 如果是提高組的數論那麼就要…
好好看書學數學!
一起共勉
數論 NOIP2007 Hanoi雙塔問題
前幾天z老師給我們把歷年noip普及組的數論題都找了出來 說真的 目前對於高精度還一竅不通的我 有些題真心不會 但是最後看看 才發現 我基本上都沒用到高精.例如這個題 正解確實要用高精 但是我還是沒有.我的做法已經在洛谷oj發布了題解 題目 hanoi雙塔問題 noip普及組 2007t4 難度 普...
NOIP2007Hanoi雙塔問題
題目描述 給定a b c三根足夠長的細柱,在a柱上放有2n個中間有空的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的 下圖為n 3的情形 現要將這些國盤移到c柱上,在移動過程中可放在b柱上暫存。要求 1 每次只能移動乙個圓盤 2 a b c三根細柱上的圓盤都要保持上...
1139 NOIP2007 Hanoi雙塔問題
給定a,b,c三根足夠長的細柱,在a柱上放有2n個中間有空的圓盤,共有n個不同的尺寸,每個尺寸都有兩個相同的圓盤,注意這兩個圓盤是不加區分的 下圖為n 3的情形 現要將 這些國盤移到c柱上,在移動過程中可放在b柱上暫存。要求 1 每次只能移動乙個圓盤 2 a b c三根細柱上的圓盤都要保持上小下大的...