C语言----尼科彻斯定理

 尼科彻斯定理

实例说明:

        尼科彻斯定理的内容是:任何一个整数的立方都可以写成一串连续奇数的和。下面我们就用编程的思想来验证该定理。例如:输入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。在确定了范围后就可以从最大值开始进行穷举,从而计算出最终结果。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值