编写一个应用程序,一些相续正整数的立方和正好等于另一个整数的立方

Posted likeqc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个应用程序,一些相续正整数的立方和正好等于另一个整数的立方相关的知识,希望对你有一定的参考价值。

声明: 本文内容思路借鉴了网络上的一些前辈的文章,属于理解后的整理加工产物

题目如下:

技术图片

1、示例代码

import java.util.Scanner;
class test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入一个数作为上限");
        int high = sc.nextInt() + 1;
        int[] array = new int[high];
        long sum = 0;
        for(int i = 0; i < high; i++) {	// 0~high之间的数的立方赋值给对应下标的数组元素
            array[i] = i * i * i;
        }
        for(int i = 1; i < high; i++)
        for(int j = 1; j < i ; j++)		// 求和范围的左端
        for(int k = j; k < i; k++) {	// 右端
            sum += array[k];			// 先累加求和
            if(sum == array[i]) {
                System.out.printf("%d^3 + ...... + %d^3 = %d^3
", j, k, i);
                sum = 0;
                break;
            }
            if(sum > array[i] || k + 1 == i) {	// 若sum已经大于目标值  或 已经累加到最右端
                sum = 0;						// 则初始化sum并跳出循环
                break;
            }
        }
    }
}

思想很简单:

  1. 先把每个数的立方值赋值给数组对应下标的元素;
  2. 对目标数字前的n-1个数可能出现的每一种情况分别累加求和,符合情况的就输出。

2、错误写法(只显示与最终代码不一样的地方,下同)

if(sum > array[i]) {	// 这是最终代码中的第二个if条件的错误写法示例
    sum = 0;						
    break;
}

原因:可能出现 13+23+…+(n-1)3 < n3 这样的情况

3、不推荐写法
(1)改动的地方是下面的第三条语句

for(int i = 1; i < high; i++) {
    for(int j = 1; j < i ; j++) {		// 求和范围的左端
        sum = 0;	// 此处添加一条初始化sum的语句的话,思想与示例代码完全一致,但是会导致sum被重复初始化
        for(int k = j; k < i; k++) {	// 右端
            sum += array[k];            // 先累加求和
        }
        if(sum == array[i]) {
            System.out.printf("%d^3 + ...... + %d^3 = %d^3
", j, k, i);
            sum = 0;
            break;
        }
        if(sum > array[i]) {	
            sum = 0;						
            break;
        }
    }
}

(2)或则是下面这一种写法(第二个if语句)

if(k + 1 == i) {// 这样虽然不会出现sum重复初始化的情况,
    sum = 0;	// 但是当出现 sum > array[i] 情况时,还会继续进行没有必要的循环			
    break;
}

likeqc
ends



以上是关于编写一个应用程序,一些相续正整数的立方和正好等于另一个整数的立方的主要内容,如果未能解决你的问题,请参考以下文章

完美立方

完美立方

6.2心得

检查长整数是不是为立方体的快速方法(在Java中)

完美立方Python算法实现

2810 完美立方(枚举——搜索空间解不唯一)