编写一个应用程序,一些相续正整数的立方和正好等于另一个整数的立方
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;
}
}
}
}
思想很简单:
- 先把每个数的立方值赋值给数组对应下标的元素;
- 对目标数字前的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
以上是关于编写一个应用程序,一些相续正整数的立方和正好等于另一个整数的立方的主要内容,如果未能解决你的问题,请参考以下文章