码迷,mamicode.com
首页 > 编程语言 > 详细

【Java】【找规律】Gym - 101243B - Hanoi tower

时间:2017-10-04 16:42:47      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:经典的   sys   随心所欲   integer   偶数   inpu   两种方法   tip   oid   

题意:给你一个经典的汉诺塔递归程序,问你最少几步使得三个柱子上的盘子数量相同。(保证最开始盘子数量可以被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

标签:经典的   sys   随心所欲   integer   偶数   inpu   两种方法   tip   oid   

原文地址:http://www.cnblogs.com/autsky-jadek/p/7625774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!