【高精度】【找规律】Gym – 101243B – Hanoi tower

【高精度】【找规律】Gym – 101243B – Hanoi tower

大家好,又见面了,我是全栈君。

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

转载于:https://www.cnblogs.com/autsky-jadek/p/7625774.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108122.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ERROR 1396 (HY000): Operation ALTER USER failed for ‘root’@’localhost’「建议收藏」

    ERROR 1396 (HY000): Operation ALTER USER failed for ‘root’@’localhost’「建议收藏」注:原因为MySql8.0.11换了新的身份验证插件(caching_sha2_password),原来的身份验证插件为(mysql_native_password)。而客户端工具NavicatPremium12中找不到新的身份验证插件(caching_sha2_password),对此,我们将mysql用户使用的登录密码加密规则还原成mysql_native_passwor…

    2022年8月12日
  • 基于51单片机智能小车的设计与实现转弯避障_基于单片机的智能小车设计

    基于51单片机智能小车的设计与实现转弯避障_基于单片机的智能小车设计0引言学习智能小车系统,有助于提高搭建系统的能力和对自动控制技术的理解。智能小车是一个较为完整的智能化系统,而智能化的研究已成为我国追赶世界科技水平的重要任务。智能小车有它特有的特点:成本低,涉及的知识面广,易于拓展[1]。整个智能小车系统作为一个完整的系统,从它的原理图的实现到实物的完成的过程,不仅需要深厚的电子方面的知识,还有对电路实现的良好掌握,对于培养学生的实践能力都有重要的意义。智能小车…

    2022年10月17日
  • matlab三维图怎么改变颜色_matlab画复杂函数图像

    matlab三维图怎么改变颜色_matlab画复杂函数图像当我们学习surface命令时,已经看到了三维作图的一些端倪。在matlab中我么可以调用mesh(x,y,z)函数来产生三维图像。首先,我们用z=cos(x)sin(y)在-2pi≤x,y≤2pi内的图像来看看:[x,y]=meshgrid(-2*pi:0.1:2*pi);z=cos(x).*sin(y);mesh(x,y,z),xlabel(‘x’),ylabel(‘y’),zla…

    2022年8月31日
  • 用Pycharm 直接下载Pyinstaller,以及使用问题解决

    用Pycharm 直接下载Pyinstaller,以及使用问题解决作为一个学语言学着玩的人,肯定很想把自己的学py文件打包发给别人,Pyinstaller包满足你。因为我一般下载包都是通过Pycharm下载的,有两个方法:一:在Pycharm中你输入:importPyinstaller#会报错只需要按住alt+回车下面就会出现是否安转此包,再回车一下等待就会自动安转完成;二:在Pycharm左上角的File->Setti…

    2022年8月26日
  • Databus for Oracle

    Databus for OracleDatabus组成Relay:数据抓取端读取数据源变更行(ROW),并将变更行数据序列化到内存缓冲区。监听客户端请求并传输缓冲区的数据。Client:数据客户端检查Relay端的数据变更,并同步数据。如果与Relay之间数据变更相差太大、会执行追溯功能。注:单个客户端既可以处理全部Databus数据流,也可以作为集群的一部分处理一小部分数据流。bootstrap-pr…

    2022年10月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号