题目描述
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19

输入
多组输入,输入一个整数。
输出
输出分解后的字符串。

样例输入
6

样例输出
31+33+35+37+39+41

ps:刚刚开始看这个题目的时候虽然感觉这是一个水题,但是自己却很久很久没做出来,很久很久…直到看了室友的代码,然后直接照搬过来,现在看看,是一个模拟+找规律的题目,

  • 首先让算出n*n,因为它恰好等于中间的数,再判断n是奇数还是偶数,如果是奇数,那么它的平方正好是中间的奇数,如果是偶数,虽然它的平方是中间数,但是不是奇数,我们需要减去一才可以。
  • 之后再找规律,奇数和偶数不同,找出第一个奇数的位置,我们要利用m与n的之间的关系去找出第一个奇数的位置,然后每次加2就可以输出来了
#include <bits/stdc++.h>
using namespace std;
int main()
{
   
   int n, b;
   while (~scanf("%d", &n))
   {
   
      int m = n * n;
      if (m & 1)
      {
   
         b = m - 2 * (n / 2);
         for (int i = 1; i <= n; ++i, b += 2)
            printf("%d%c", b, i == n ? '\n' : '+');
      }
      else
      {
   
         b = (m - 1) - 2 * (n / 2 - 1);
         for (int i = 1; i <= n; ++i, b += 2)
            printf("%d%c", b, i == n ? '\n' : '+');
      }
   }
   return 0;
}

之后看了大佬的题解真的是感触很深,大佬的见解真的很独到,有时候不懂得时候不如从另一个角度来看问题,不能拘泥于一个角度,做题需要自己多思考,只有自己思考了才能记得住,才能记得牢,照着代码敲一遍还不是抄别人的,要自己能独立写出来,才算真正掌握了这个代码——思想

  • 1^3=1=第1个奇数
  • 2^3=3+5=第2个奇数+第3个奇数
  • 3^3=7+9+11=第4个奇数+第5个奇数+第6个奇数
  • 4^3=13+15+17+19=…
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e5 + 5;
const int inf = 0x3f3f3f3f;
int main()
{
   
   ll n;
   while (~scanf("%lld", &n))
   {
   
      ll st = (n - 1) * n / 2; //计算前面有几个奇数
      st = 2 * st + 1;
      for (ll i = 1; i <= n; ++i, st += 2)
         printf("%lld%c", st, i == n ? '\n' : '+');
   }
   return 0;
}
希望你遇到很好的朋友,从此孤单时也有陪伴;希望你喜欢上一个很好的人,从此难过时也有动力;希望你对自己的生活有信心,不管前路是否模糊。希望你即使被伤害过依旧有去爱这个世界的能力,变得坚定又温柔。—— 卢思浩 ​​​