找到更多的这样的整数:一些相续正整数的立方和正好等于另一个整数的立方。
下面是题目 和 我想到的最优算法,大家看看有没有更好的算法
程序代码:/*编写一个应用程序,验证以下等式是成立的:
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编辑过]







