尼科彻斯定理
实例说明:
尼科彻斯定理的内容是:任何一个整数的立方都可以写成一串连续奇数的和。下面我们就用编程的思想来验证该定理。例如:输入5之后查看运行结果。
实现过程:
1. 在编译环境中创建C文件。
2. 引用头文件,代码如下:#include <stdio.h>
3. 程序中使用了两个while循环语句,第一个while语句从可能的最大值开始直到1为止进行穷举,第二个while循环通过第一个while循环所确定的i值每次减2逐次累加求和,当累加和等于立方值时,输出累加过程并跳出循环,当累加和大于立方值时,也同样跳出第二个循环回到第一个循环中。
代码展示:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i,j,k=0,l,n,m,sum,flag=1;
printf("请输入一个数:");
scanf("%d",&n); //从键盘中任意输入一个数
m = n * n * n; //计算该数的立方和
i = m / 2; //立方值的一半
if (i % 2 == 0) //当i为偶数时i值加1
i = i + 1;
while (flag == 1 && i >= 1) //当i大于等于1且flag=1时执行循环体语句
{
sum = 0;
k = 0;
while (1)
{
sum += (i - 2 * k); //奇数累加求和
k++;
if (sum == m) //如果sum于m相等,则输出累加过程
{
printf("%d*%d*%d=%d=",n,n,n,m);
for ( l = 0; l < k - 1; l++)
printf("%d+",i - l * 2);
printf("%d\n",i - (k - 1)*2); //输出累加求个的最后一个数
flag = 0;
break;
}
if (sum > m)
break;
}
i -=2; //如果i等于下一个奇数,则继续上面的过程
}
return 0;
}
运行结果:
技术要点:
解决本实例的关键时,先确定这串连续奇数的最大值的范围,可以这样分析,任意和立方值(这里设为sum)的一半(这里设为x)如果是奇数,则x+x+2的值一定大于sum,那么这串连续奇数的最大值不会超过x;如果x是偶数,则需要把他变成奇数,那么变成奇数到底是加1、减1还是其他呢?这里选择加1,因为x+1+x-1正好等于sum,所以当x是偶数时,这串连续奇数的最大值不会超过x+1。在确定了范围后就可以从最大值开始进行穷举,从而计算出最终结果。