尼科彻斯定理 (分奇偶部分求和)

2024-05-12 06:18

本文主要是介绍尼科彻斯定理 (分奇偶部分求和),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写完这部分代码,感觉非常开心!

题目

描述
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
例如:
13=1
23=3+5
33=7+9+11
43=13+15+17+19
接口说明
原型:
/*
功能: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
原型:
int GetSequeOddNum(int m,char * pcSequeOddNum);
输入参数:
int m:整数(取值范围:1~100)
返回值:
m个连续奇数(格式:“7+9+11”);
*/
public String GetSequeOddNum(int m)
{
/*在这里实现功能*/
return null;
}

输入

输入一个int整数

输出

输出分解后的string

样例输入

6

样例输出

31+33+35+37+39+41

思路

通过观察可以得知,  n3  可以通过以  n2  的周围对称的数相加求和而成。
例如:
6
这里 square=36 ,因此只能是中心是 35 37,左右各增一个。。。(对称性)

代码

#include <iostream>
#include <set>using namespace std;
//插入到set
void GetSequeOddNum(int num,set<int> &s)
{int cubic=num * num * num;int square = num * num;int sum=0;//求和int step=(square%2==0)?-1:0;//偶数需要向前一位  奇数不用变int counter=(square%2==0)?0:-1;//偶数刚开始需要两个,奇数只需要一个!!!int base=0;while(sum!=cubic){counter+=2;//初始的时候是奇数为1 偶数为2,每次多两个(对称)sum=0;if(square%2==0)//根据奇偶来确定起始数的大小{base = (square-step) - (counter);}else{base = (square-step) - (counter-1);}//求和for(int i=0; i<counter; ++i){sum+=base;base+=2;}}//放入set容器for(int i=1; i<=counter; ++i){s.insert(base-i*2);}
}int main()
{int num=0;set<int> s;cin>>num;if(num<=0)//异常输入检测{cout<<0<<endl;return 0;}GetSequeOddNum(num,s);//按照格式输出for(set<int>::iterator iter=s.begin(); iter!=s.end(); ++iter){if(iter==s.begin()){cout<<*iter;}else{cout<<"+"<<*iter;}}cout<<endl;return 0;
}
这里写图片描述
这里写图片描述

这篇关于尼科彻斯定理 (分奇偶部分求和)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981826

相关文章

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

hdu1010 奇偶剪枝

恰好t时间到达 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.Arrays;import

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

项目实战系列三: 家居购项目 第四部分

购物车 🌳购物车🍆显示购物车🍆更改商品数量🍆清空购物车&&删除商品 🌳生成订单 🌳购物车 需求分析 1.会员登陆后, 可以添加家居到购物车 2.完成购物车的设计和实现 3.每添加一个家居,购物车的数量+1, 并显示 程序框架图 1.新建src/com/zzw/furns/entity/CartItem.java, CartItem-家居项模型 /***

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

1 模拟——67. 二进制求和

1 模拟 67. 二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1:输入:a = "11", b = "1"输出:"100"示例 2:输入:a = "1010", b = "1011"输出:"10101" 算法设计 可以从低位到高位(从后向前)计算,用一个变量carry记录进位,如果有字符没处理完或者有进位,则循环处理。两个字符串对

关于断言的部分用法

1、带变量的断言  systemVerilog assertion 中variable delay的使用,##[variable],带变量的延时(可变延时)_assertion中的延时-CSDN博客 2、until 的使用 systemVerilog assertion 中until的使用_verilog until-CSDN博客 3、throughout的使用   常用于断言和假设中的

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

Leetcode67---二进制求和

https://leetcode.cn/problems/add-binary/description/ 给出的两个二进制,我们可以从最后开始往前运算。 给当前短的一位前面补充0即可。 class Solution {public String addBinary(String a, String b) {//给的就是二进制字符串 最后一位开始遍历 如果没有就补充0?StringBuil

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口