恢复密码c++问题求解

题目描述
小A同学设置了n个互不相等的整数,作为自己电脑的密码。
为了防止自己遗忘,他写出一组数作为提示信息,这组数有n-1个数字,其中第i个数是用密码的第i-1位和第i+1位相加得到的。
比如,假设密码为1,3,5,4,2,则提示信息为:4,8,9,6。
请你根据提示信息,计算出小A的密码,如果有多种可能的解,你只需要输出字典码最小的那组解。
全排列指的是:将数字1n全部打乱,这组数必定包含1n的每个数,且不重复。
输入
输入的第一行包含一个整数 N(2≤N≤10),数组中的每个数Ai满足1≤Ai≤2000。
第二行包含 N-1 个空格分隔的整数。
输出
输出一行,包含 N 个空格分隔的整数。
样例
输入
5
4 8 9 6
输出
1 3 5 4 2

#include<bits/stdc++.h>
using namespace std;
int n,a[1001],s[1001],p=1,l=0; 
int main(){
    cin>>n;
    for(int i=1;i<n;i++){
        cin>>a[i];
    }for(int i=1;i<=n;i++){
        for(int j=1;j<=9;j++){
            for(int k=1;k<=9;k++){
                if((j+k)==a[i]&&(i==1||(j+l)==a[i])){
                    s[p]=j;
                    p++;
                    l=k;
                }
            }
        }
    }
    for(int i=1;i<n;i++)cout<<s[i]<<" ";
    cout<<l;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
int main(){
int n,a[10010],b[10010];
cin>>n;
for(int i=1;i<n;i++)cin>>a[i];
for(int k=0;k<=a[1];k++){
int q=k,t=1;
b[t]=k;
for(int i=1;i<n;i++){
q=a[i]-q;
t++;
b[t]=q;
}
int c[10101];
bool asdf=false;
for(int i=1;i<=n;i++){
c[i]=b[i];
}sort(c+1,c+n+1);
for(int i=1;i<=n;i++){
if(c[i]!=i)asdf=true;
}
if(!asdf){
for(int i=1;i<=n;i++)cout<<b[i]<<" ";
exit(0);
}
}
return 0;
}