【Java】【找規律】Gym - 101243B - Hanoi tower
阿新 • • 發佈:2017-10-04
開始 輸出 red port n-1 mat brush 規律 讀寫
題意:給你一個經典的漢諾塔遞歸程序,問你最少幾步使得三個柱子上的盤子數量相同。(保證最開始盤子數量可以被3整除)
規律:ans(n)=2^(2*n/3-1)+t(n/3)。
t(1)=0.
t(n)=
t(n-1)+1,n為偶數
t(n-1)*4+2,n為奇數。
Java文件讀寫主要有以下兩種方法,第二種,輸出格式更隨心所欲,更實用:
import java.util.*; import java.io.*; import java.math.*; public class Main{ public static void main(String[] argc){ BigInteger[] t=new BigInteger[305]; BigInteger[] pw=new BigInteger[305]; t[1]=BigInteger.ZERO; for(int i=2;i<=100;++i){ if(i%2==0){ t[i]=t[i-1].add(BigInteger.ONE); } else{ t[i]=t[i-1].multiply(BigInteger.valueOf(4l)).add(BigInteger.valueOf(2l)); } } pw[0]=BigInteger.ONE; for(int i=1;i<=300;++i){ pw[i]=pw[i-1].multiply(BigInteger.valueOf(2l)); } Scanner cin = new Scanner(System.in); try{cin=new Scanner(new FileInputStream("input.txt"));}catch(Exception e){} int n=cin.nextInt(); cin.close(); /*pw[2*n/3-1].add(t[n/3]).toString()*/ File file=new File("output.txt"); try{ BufferedWriter bf=new BufferedWriter(new PrintWriter(file)); bf.append(pw[2*n/3-1].add(t[n/3]).toString()); bf.close(); } catch(Exception e){} } }
import java.util.*; import java.io.*; import java.math.*; public class Main{ public static void main(String[] argc){ BigInteger[] t=new BigInteger[305]; BigInteger[] pw=new BigInteger[305]; t[1]=BigInteger.ZERO; for(int i=2;i<=100;++i){ if(i%2==0){ t[i]=t[i-1].add(BigInteger.ONE); } else{ t[i]=t[i-1].multiply(BigInteger.valueOf(4l)).add(BigInteger.valueOf(2l)); } } pw[0]=BigInteger.ONE; for(int i=1;i<=300;++i){ pw[i]=pw[i-1].multiply(BigInteger.valueOf(2l)); } Scanner cin = new Scanner(System.in); try{cin=new Scanner(new FileInputStream("input.txt"));}catch(Exception e){} int n=cin.nextInt(); cin.close(); /*pw[2*n/3-1].add(t[n/3]).toString()*/ //File file=new File("output.txt"); try{ FileWriter fw = new FileWriter("output.txt", true); PrintWriter cout = new PrintWriter(fw); cout.println(pw[2*n/3-1].add(t[n/3])); cout.flush(); //BufferedWriter bf=new BufferedWriter(new PrintWriter(file)); //bf.append(pw[2*n/3-1].add(t[n/3]).toString()); //bf.close(); } catch(Exception e){} } }
【Java】【找規律】Gym - 101243B - Hanoi tower