声明: 本文内容思路借鉴了网络上的一些前辈的文章,属于理解后的整理加工产物
题目如下:
1、示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 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++) { 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\n", j, k, i); sum = 0; break; } if(sum > array[i] || k + 1 == i) { sum = 0; break; } } } }
|
思想很简单:
- 先把每个数的立方值赋值给数组对应下标的元素;
- 对目标数字前的n-1个数可能出现的每一种情况分别累加求和,符合情况的就输出。
2、错误写法(只显示与最终代码不一样的地方,下同)
1 2 3 4
| if(sum > array[i]) { sum = 0; break; }
|
原因:可能出现 13+23+…+(n-1)3 < n3 这样的情况
3、不推荐写法
(1)改动的地方是下面的第三条语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| for(int i = 1; i < high; i++) { for(int j = 1; j < i ; j++) { sum = 0; for(int k = j; k < i; k++) { sum += array[k]; } if(sum == array[i]) { System.out.printf("%d^3 + ...... + %d^3 = %d^3\n", j, k, i); sum = 0; break; } if(sum > array[i]) { sum = 0; break; } } }
|
(2)或则是下面这一种写法(第二个if语句)
1 2 3 4
| if(k + 1 == i) { sum = 0; break; }
|
likeqc
ends