每日一题----尼科彻斯定理

每日一题----尼科彻斯定理
题目来源:牛客网—尼克切斯定理


1.题目:
描述
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。
数据范围:1≤m≤100
进阶:时间复杂度:O(m) ,空间复杂度:O(1)
输入描述:
输入一个int整数
输出描述:
输出分解后的string
示例1
输入:
6
复制
输出:
31+33+35+37+39+41


2.解题思路:
首先要寻找规律:
(1)不管n是奇数还是偶数,连续n个数相加的平均值一定是n的平方
(2)n为奇数时,第一个数字(odd_start)是:avarge-2*(n/2)
最后的数字(odd_end)是:avarge+2*(n/2)
(3)同理:n为偶数时,第一个数字(even_start)是avarge-n+1
最后一个数字(even_end)是avarge+n+1


3.代码的实现:

#include<stdio.h>
void func(int n)
{
    int avarge=n*n;
    if(n%2==1)
    {
        int odd_start=avarge-2*(n/2);
        int odd_end=avarge+2*(n/2);
        int m=n-1;
        while(m)
        {
            printf("%d+",odd_start);
            m--; 
            odd_start+=2;
        }
        printf("%d",odd_end);
    }
    else if(n%2==0)
    {
        int even_start=avarge-n+1;
        int even_end=avarge+n-1;
        int m=n-1;
        while(m)
        {
            printf("%d+",even_start);
            m--; 
            even_start+=2;
        }
        printf("%d",even_start);

    }
}
int main()
{
    int n=0;
    scanf("%d",&n);
    func(n);
    return 0;
}

________________________________________________________________________完

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值