C语言初阶牛客网刷题——HJ76 尼科彻斯定理【难度:简单】

1.题目描述——HJ76 尼科彻斯定理

HJ76 尼科彻斯定理
验证尼科彻斯定理,即:任何一个整数 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 个连续奇数之和的形式输出。
注意:本题含有多组输入数据。
输入描述:输入一个int整数
输出描述:输出分解后的string

2. 思路

3^3 的起始奇数是 7 , 则 {7, 9, 11} 3个奇数求和表达式 7 + 9 + 11
观察每个起始奇数的个规则: m^3 的起始奇数值等于 m * (m - 1) + 1

奇数起始项规律:
首先所有奇数项构成一个差值为2的等差数列, 1 3 5 7 9 …
其次,1的起始奇数是第1个等差数列项,2的起始奇数是第2个等差数列项,3的起始奇数是第4个等差数列项…
形成规律: 1 2 4 7…,而他们的差值分别是1 2 3 4 5…,所以第n项就是一个从1开始到n-1的等差数列之和+1

因此当有了需求m的立方,首先计算他的第一个奇数项是总体的第几个 。
等差数列求和公式 Sn=n(a1+an)/2 m * (m - 1) / 2
等差数列第n项公式 an=a1+(n-1)d 1 + ((m * (m - 1) / 2) + 1 - 1) * 2
最终得到m的立方的表达式起始奇数: m * (m - 1) + 1

3.代码实现

#include <stdio.h>

int main() {
    int a;
    while (scanf("%d", &a) != EOF) { 
        
        int start = a * (a - 1) + 1;//找到对应m^3的起始奇数
        char buf[10240] = {0};
        sprintf(buf, "%d", start);//与printf用法类似,格式化字符串但是不用于打印而是放到一个buf中
        for (int i = 1; i <a ; i++) //先将起始奇数转换成为字符串存入buf中
        {//然后将紧随随后的m-1个奇数数字转换为字符串,按照指定格式放入buf中
//%s+%d, 要求先有一个字符串,然后是+符号,然后是个数字的格式,对应是buf原先的数据,和奇数
           sprintf(buf, "%s+%d", buf, start+=2);
        }
        printf("%s\n", buf);
    }
    return 0;
}

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值