原题

题目大意
给出一个数组,该数组是一个NNN排列的数组变形而来,且b[i]=a[i]+a[i+1]b[i]=a[i]+a[i+1]b[i]=a[i]+a[i+1]
题目分析
确定第一个数,后面全部都确定了,找到一个合法的就能输出了,就是这样
代码
#include<cstdio>
#include<cstring>
int a[1011],b[1011];
bool been[1011];
int main()
{
int n;
bool flag;
scanf("%d",&n);
for (int i = 1;i < n;i++)
{
scanf("%d",b + i);
}
for (int i = 1;i < b[1];++i)
{
memset(been,0,sizeof(been));
a[0] = i;flag = true;
been[a[0]] = true;
for (int j = 1;j < n;++j)
{
a[j] = b[j] - a[j - 1];
if (a[j] == a[j - 1] or a[j] <= 0 or a[j] > n or been[a[j]])
{
flag = false;
break;
}
been[a[j]] = true;
}
if (flag) break;
}
for (int i = 0;i < n;i++) printf("%d ",a[i]);
return 0;
}
本文介绍了一个数组变形问题的解决思路,通过确定数组的第一个元素,利用给定的b[i]=a[i]+a[i+1]公式,逆推求解原始数组a的所有元素。文章提供了完整的C++代码实现,展示了如何检查解的合法性并输出结果。
897

被折叠的 条评论
为什么被折叠?



