java的递归小算法

4.题目描述:
有这样一个奇怪的天平,它的砝码只有1g, 3g, 9g, 27g......3k g并且各只有一个,但它却能够称出所有整数g质量的物体例如要称出质量2g,那就一边放一个3g,另一边放物体和1g的砝码就可以了。放在物体那边的砝码在前面加负号表示之。
输入:
多组测试数据,每行只有一个正整数n,表示要称的物体质量,
n32bit有符号整数所能表示的数的范围内,
最后请使用EOF结束本程序
输出:
怎么称质量n出来
样例输入:
2
3
4


样例输出:
2 = 3 - 1                               
3 = 3
4 = 3 + 1


算法思路:

首先,输入的数字是item,封装一個方法为等比数列求和.

An=3^(n-1)

Sn=(3^n - 1)/2;

 

首先判断,item在相邻Sn的哪个范围,从而确定n的值.

然后,再判断item3^n的大小比较

从而确定是new_item=3^n - item  或者  new_item= item - 3^n Sn-1 <= item <= Sn),如何递归.

判断是否new_item=1234;则出口。


import java.util.Scanner;

public class Weigh {

	// 计算是最大用的是的3的n次方的n是多少.
	public static int judge_n(long item) {
		int n = 1;
		while ((long) (Math.pow(3, n) - 1) / 2 < item) {
			n++;
		}
		return n - 1;
	}
	//递归来算出str的值.
	public static String printf_result(int n, long i) {
		String str1 = "1";
		String str2 = "3-1";
		String str3 = "3";
		String str4 = "3+1";
		//i=1、2、3、4分别是程序的出口.
		if (i == 1) {
			return str1;
		} else if (i == 2) {
			return str2;
		} else if (i == 3) {
			return str3;
		} else if (i == 4) {
			return str4;
		} else {//当3^n<item的时候,自然是item=3^n + x.故中间的连接符为"+".后面的字符串就是递归下一位的.
			if (Math.pow(3, n) < i) {
				String str = (long)Math.pow(3, n) + "+" + printf_result(judge_n(new_item(n,i)),new_item(n,i));
				return str;
			} else if (Math.pow(3, n) == i) {//3^n=item,直接得到结果.可以打印输出.
				return Long.toString((long) Math.pow(3, n));
			} else {//当3^n<itme,item=3^n-x.故中间的连接符为"-",后面的字符串先递归到下一位再调用转换符号的方法.
				String str = (long)Math.pow(3, n) + "-" + change_symbol(printf_result(judge_n(new_item(n,i)),new_item(n,i)));
				return str;
			}
		}

	}
	//计算下一个递归所需的值
	public static long new_item(int n,long item) {
		if(Math.pow(3, n) > item) {
			return (long)Math.pow(3,n) - item;
		}else{
			return item - (long)Math.pow(3,n);
		}
	}
	//改变字符串的符号.
	public static String change_symbol(String str1) {
		char[] stringArr = str1.toCharArray();

		for (int i = 0; i < stringArr.length; i++) {
			if (stringArr[i] == '+') {
				stringArr[i] = '-';
			} else if (stringArr[i] == '-') {
				stringArr[i] = '+';
			}
		}
		return new String(stringArr);
	}

	public static void main(String args[]) {
		Scanner input = new Scanner(System.in);
		System.out.println("please intput the weigh what do you want to weigh:");
		long i = input.nextLong();
		//做简单错误的判断.
		if (i < 1) {
			System.out.println("输入有误,请输入大于1g的所需称重物体.");
		} else {
			int n = judge_n(i);
			System.out.print(i + "=");
			String str = printf_result(n, i);
			System.out.println(str);
		}
	}
}


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资源 5来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。、资 5源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值