题解 | 尼科彻斯定理
尼科彻斯定理:
又称为斐波那契数列定理,指的是对于任意正整数 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] ;
}
}
}
查看13道真题和解析
