6760: 九连环(大数)
6760: 九連環(huán)
http://exam.upc.edu.cn/problem.php?id=6760
時間限制:?1 Sec??內存限制:?128 MB
提交:?582??解決:?92
[提交] [狀態(tài)] [討論版] [命題人:admin]
題目描述
九連環(huán)是一種源于中國的傳統(tǒng)智力游戲。如圖所示,九個圓環(huán)套在一把“劍”上,并且互相牽連。游戲的目標是把九個圓環(huán)從“劍”上卸下。
圓環(huán)的裝卸需要遵守兩個規(guī)則。
第一個(最右邊)環(huán)任何時候都可以裝上或卸下。
如果第k個環(huán)沒有被卸下,且第k個環(huán)右邊的所有環(huán)都被卸下,則第k+1個環(huán)(第k個環(huán)左邊相鄰的環(huán))可以任意裝上或卸下。
與魔方的千變萬化不同,解九連環(huán)的最優(yōu)策略是唯一的。為簡單起見,我們以“四連環(huán)”為例,演示這一過程。這里用1表示環(huán)在“劍”上,0表示環(huán)已經(jīng)卸下。
初始狀態(tài)為1111,每部的操作如下:
1101(根據(jù)規(guī)則2,卸下第2個環(huán))
1100(根據(jù)規(guī)則1,卸下第1個環(huán))
0100(根據(jù)規(guī)則2,卸下第4個環(huán))
0101(根據(jù)規(guī)則1,裝上第1個環(huán))
0111(根據(jù)規(guī)則2,裝上第2個環(huán))
0110(根據(jù)規(guī)則1,卸下第1個環(huán))
0010(根據(jù)規(guī)則2,卸下第3個環(huán))
0011(根據(jù)規(guī)則1,裝上第1個環(huán))
0001(根據(jù)規(guī)則2,卸下第2個環(huán))
0000(根據(jù)規(guī)則1,卸下第1個環(huán))
由此可見,卸下“四連環(huán)”至少需要10步。隨著環(huán)數(shù)增加,需要的步數(shù)也會隨之增多。例如卸下九連環(huán),就至少需要341步。
請你計算,有n個環(huán)的情況下,按照規(guī)則,全部卸下至少需要多少步。
?
輸入
輸入第一行為一個整數(shù)m ,表示測試點數(shù)目。
接下來m行,每行一個整數(shù)n。
?
輸出
輸出共m行,對應每個測試點的計算結果。
?
樣例輸入
3 3 5 9?
樣例輸出
5 21 341?
提示
對于10%的數(shù)據(jù),1≤n≤10。
對于30%的數(shù)據(jù),1≤n≤30。
對于100%的數(shù)據(jù),1≤n≤105,1≤m≤10。
規(guī)律:
? ? ? ?奇數(shù) : ?a[i-1]*2+1;
? ? ? ?偶數(shù):a[i-1]*2;
代碼:
import java.util.*; import java.math.*;public class dashu{public static void main(String[] args) {int m,n;Scanner cin=new Scanner(System.in);m=cin.nextInt();while(m>0) {m--;n=cin.nextInt();if(n==1)System.out.println("1");else{BigInteger s;BigInteger a=BigInteger.valueOf(1);BigInteger b=BigInteger.valueOf(2);s=a;for(int i=2;i<=n;i++){if(i%2==0)s=s.multiply(b);else{s=s.multiply(b);s=s.add(a);}}System.out.println(s);}}} }?
總結
以上是生活随笔為你收集整理的6760: 九连环(大数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我是ptspzy
- 下一篇: 7.03每日股市晚评