题目大意:给出一整数n,要求输出一个长为n的数组,使得任意两个相邻数的和都等于所有数的和,且数组中不能出现0
2<=n<=1000
思路:n=2时:显然任意两个数都满足条件
n=3时: ; ;因为不能有数等于0,所以没有合法数组
n=4时:同上可以得出;;又由可知每相邻两个数相反,间隔一个数相等,所以让数组为1,-1,1-1即可,n=6,8,10...时同理,
n=5时:间隔一个数相等的结论依然成立,然后又有 ,所以相邻两个数是-2/1倍的关系,间隔一个数相等,n=7时,同理可得相邻两个数是-3/2倍,n=9时是-4/3倍,可以发现分母=(n-1)/2-1,分子等于分母+1,所有构造出的数组就是(n-1)/2-1,-(n-1)/2,(n-1)/2-1...
//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--)
{
int n;
cin >> n;
if (n == 3)
{//n=3时没有可行解
cout << "NO" << endl;
}
else if (n & 1)
{//其他奇数时
cout << "YES" << endl;
for (int i = 1; i <= n - 1; i += 2)
{
cout << (n - 1) / 2 - 1 << " " << -(n - 1) / 2 << " ";
}
cout << (n - 1) / 2 - 1 << endl;
}
else
{//偶数时
cout << "YES" << endl;
for (int i = 1; i <= n; i += 2)
{
cout << "1 -1 ";
}
cout << endl;
}
}
return 0;
}