题目描述:
验证尼科彻斯定理,即:任何一个整数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
示例:
输入:
6
输出:
31+33+35+37+39+41
解题思路:
本题是个数学问题,找规律。2的立方相当于第2个奇数和第3个奇数相加,3的立方相当于第4个奇数+第5个奇数+第6个奇数,那么N的立方等于N个奇数相加,开头的奇数是从哪个开始呢?1的立方有1个加项,2的立方有2个加项,3的立方有3个加项,则4的立方其开头的奇数是从1开始6(1+2+3)个奇数后的下一个奇数。
设计算法,假设输入num值,先计算前num-1项的加项有多少个,则根据序列求和公式sum=(num-1)*(num-1+1)/2,即前num-1项加项共有sum个;而num立方的第一个奇数是2*sum+1;写个循环从第一个奇数开始循环num次完成,前num-1次后面带个+字符。
测试代码:
#include <iostream> #include <vector> using namespace std; int main() { int num; while(cin>>num) { int sum=num*(num-1)/2; vector<int> result; for(int k=0;k<num;++k) { if(k!=num-1) { cout<<2*(sum+k)+1<<"+"; } else{ cout<<2*(sum+k)+1<<endl; } } } return 0; }