找到更多的这样的整数:一些相续正整数的立方和正好等于另一个整数的立方。
下面是题目 和 我想到的最优算法,大家看看有没有更好的算法程序代码:
/*编写一个应用程序,验证以下等式是成立的: 3^3+4^3+5^3=6^3; 6^3+7^3+...+69^3=180^3; 找到更多的这样的整数:一些相续正整数的立方和正好等于另一个整数的立方。*/ #include <stdio.h> #define N 1200 //大于1200后就快越界了 int main(void) { int x[N]; long sum = 0; for (int i = 0; i < N; i++)// 把0到N之间的的数的3次方赋值到对应下标的数组内,以提高运算速度 x[i] = i * i * i; for (int i = 2; i < N; i++)//作为数组下标 for (int j = 1; j < i; j++)//作为开始算的最小值 for (int k = j; k < i; k++)//不断提高最左边值 { sum += x[k]; if (sum == x[i]) { printf("%d^3 + ...... + %d^3 = %d^3\n", j, k, i); sum = 0; break; } if (sum > x[i])//当前面的整数和大于目标值,中断循环以提高效率 { sum = 0; break; } } return 0; }
----------------------上面的算法有问题,更正为下面的------------------------------
程序代码:
#include <stdio.h> #define N 5000 int main(void) { long x[N]; long sum = 0; for (int i = 0; i < N; i++)// 把0到N之间的的数的3次方赋值到对应下标的数组内,以提高运算速度 x[i] = i * i * i; for (int i = 2; i < N; i++)//作为数组下标 for (int j = 1; j < i; j++)//作为开始算的最小值 for (int k = j; k < i; k++)//不断提高最左边值 { sum += x[k]; if (sum == x[i]) { printf("%d^3 + ...... + %d^3 = %d^3\n", j, k, i); sum = 0; break; } if (k + 1 == i)// 修改了这里 { sum = 0; break; } } return 0; }
[此贴子已经被作者于2017-9-25 10:26编辑过]