题解 | 尼科彻斯定理
尼科彻斯定理:
又称为斐波那契数列定理,指的是对于任意正整数 n,存在一个由连续奇数组成的数列,使得该数列的和等于 n 的立方。
例如:
对于 n=1,数列 {1} 的和为 13=1;
对于 n=2,数列 {3,5} 的和为 23=3+5;
对于 n=3,数列 {7,9,11} 的和为 33=7+9+11;
对于 n=4,数列 {13,15,17,19}的和为 43=13+15+17+19。
由规律可知,数列长度size=n,并且数列中心点数值为n²
#include <cmath> #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; //奇数数列长度为n vector<int> nums(n, 0); int left = 0; int right = 0; int nSquared = pow(n, 2); if (n % 2 == 0) { //偶数情况 int count1 = 1; nums[n / 2 - 1 ] = nSquared - 1; left = n / 2 - 1; nums[n / 2 ] = nSquared + 1; right = n / 2; while (left > 0 && right < n - 1) { nums[--left] = nums[n / 2 - 1 ] - 2 * count1; nums[++right] = nums[n / 2 ] + 2 * count1; count1++; } } else { //奇数情况 int count2 = 1; nums[n / 2 ] = nSquared ; left = n / 2 - 1; right = n / 2 + 1; while (left >= 0 && right < n ) { nums[left--] = nums[n / 2 ] - 2 * count2; nums[right++] = nums[n / 2 ] + 2 * count2; count2++; } } //遍历输出 for (int i = 0; i < n; ++i) { if (i < n - 1) { cout << nums[i] << "+" ; } else { cout << nums[i] ; } } }