Java题目:一些相续正整数的立方和正好等于另一个整数的立方

Java题目:一些相续正整数的立方和正好等于另一个整数的立方

在MOOC上看到的题目,
示例:33 + 43 + 53 = 63
解题代码如下:

import java.util.ArrayList;

/**
 * This program is designed for: 找到这样的整数:一些相续正整数的立方和正好等于另一个整数的立方
 * 
 * @author Mr. Conductor
 * @version 0.0.1 2020-10-14
 */
public class EqualCubeSumOfConsecutiveIntegersFinder {
   
	public static void main(String[] args) {
   
		EqualCubeSumOfConsecutiveIntegers eq = new EqualCubeSumOfConsecutiveIntegers(3); // 找3个
		ArrayList<Integer[]> arr = eq.getArr();
		StringBuilder strb = new StringBuilder();
		for (Integer[] integers : arr) {
   
			for(int i = integers[0]; i <= integers[1]; i ++)
			{
   
				strb.append("" + i + "^3 ");
				if(i != integers[1]) strb.append("+ ");
			}
			strb.append("= " + integers[2] + "^3");
			System.out.println(strb.toString());
			strb.delete(0, strb.length());
		}
	}

}

class EqualCubeSumOfConsecutiveIntegers {
   
	private ArrayList<Integer[]> arr = new ArrayList<Integer[]>();
	public EqualCubeSumOfConsecutiveIntegers()
	{
   
		find(1);
	}
	private void find(int n) {
   
		int first = 2;
		label:			// 一个first可能匹配到多个结果,设一个标记方便退出外循环
		while(true)
		{
   
			double sum = Math.pow(first, 3.0);
			int t = first + 1;
			for(; t< 300; t++)		// 300:自定义,到300停止,换一个first
			{
   
				sum += Math.pow(t, 3.0);				// sum 是从 first 到 t 的立方和
				double d = Math.pow(sum, 1.0/3.0);		// d 是立方和开3次方
				int dn = (int)Math.round(d);			// dn 是立方和开3次方取整四舍五入,last的候选取值
//				System.out.print("first=" + first + " t= " + t + " dn=" + dn + " d=" + d );
				if((dn <= first + 1) || (Math.abs(d - dn ) > +1E-6))			// 如果取整前后差绝对值大于10^6,即开3次方后不是整数,continue
				{
   
//					System.out.println("pass");
					continue;
				}
//				System.out.println();
				Integer[] inte = {
   first, t, dn};
				addArr(inte);
				n --;
				// n为0时,已找到满足条件数量的匹配,退出外循环
				// n不为0时,first不变,继续向后寻找下一个可能的匹配
				if(n <= 0) break label;
			}
			first ++;	// 此first已找完(在300以内),自增1
		}
	}
	public EqualCubeSumOfConsecutiveIntegers(int n)
	{
   
		find(n);
	}

	@SuppressWarnings("unchecked")
	public ArrayList<Integer[]> getArr() {
   
		return (ArrayList<Integer[]>)arr.clone();
	}
	private void addArr(Integer[] inte) 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值