题目描述
数学中,有一个著名的定理:任何一个整数的立方都可以写成一串奇数之和。
为方便表达,我们将a的立方,记作:a(3)。
1~3的立方表达成的奇数和如下:
1(3)=1
2(3)=3+5=8
3(3)=7+9+11=27
编程求出输入的N以内的数对应的连续奇数和的分解方案。
n<=100;
输入
一个整数n(1<n≤100)。
输出
按题意输出对应的等式。
样例
输入
3
输出
3(3)=7+9+11=27
思路:
很简单,暴力枚举即可,如果三个数的和sum到了n³,循环输出。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,num,sum;
int main(){
cin>>n;
if(n%2==0){
num=n-1;
}else{
num=n;
}
for(int i=num;i<=n*n*n;i+=2){
sum=0;
for(int j=i,k=1;k<=n;k++,j+=2){
sum+=j;
}
if(sum==n*n*n){
cout<<n<<"(3)=";
for(int j=i,k=1;k<=n;k++,j+=2){
cout<<j;
if(k!=n){
cout<<"+";
}
}
cout<<"="<<n*n*n;
break;
}
}
return 0;
}
很好理解,认真看就能看懂。
这里解释一个地方,
for(int j=i,k=1;k<=n;k++,j+=2)
这是什么意思:
循环的判断条件是 k <= n,也就是只要 k 小于等于 n,循环就会继续执行。
循环体内有两个更新表达式:k++ 和 j += 2。
k++ 表示每次循环结束后将 k 的值增加 1。
j += 2 表示每次循环结束后,将 j 的值增加 2。
因此,这个循环可以看作是一个嵌套循环,其中外层循环的迭代次数由 i 控制,
内层循环的迭代次数由 k 控制。在每次内层循环结束后,j 的值会递增 2,同时 k 的值也会递增 1。
总结起来,这个循环的功能是根据外层循环的迭代次数 i,
以及内层循环的迭代次数 k,来控制变量 j 的递增步长和更新方式。