华为机试题76-尼科彻斯定理

描述

验证尼科彻斯定理,即:任何一个整数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



解题思路:

这道题比较简单,直接按照进阶版来写,满足时间复杂度和空间复杂度的要求

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

……

通过观察上述例子,可以发现等号右边的数都是从中间数散开的,而这个中间数就是m²,比如2,中间数就是2²=4,从4开始左右散开,分别是3 (4) 5;再比如4,中间数就是4²=16,从16开始左右散开,分别是13 15 (16) 17 19;再比如3,中间数就是3²=9,从9开始左右散开,分别是7 9 11;要注意,如果m是偶数,那中间数不会出现,如果m是奇数,中间数就会出现。

为了满足时间复杂度为O(m)的要求,找了一下等号右边最先出现的数,之后的数就是在前一个数的基础上+2就行,循环次数也就是m。

按照规律可得:等号右边第一个数为:m²-m+1

了解以上,就可以写代码了
 

#include <stdio.h>
#include <math.h>
int main()
{
    int m,temp;
    scanf("%d",&m);
    temp=pow(m,2)-m+1;
    while(m>1)
    {
        printf("%d+",temp);
        temp+=2;
        m--;
    }
    printf("%d\n",temp);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值