題目描述
有一個數組a[1..n],但是這個數組的內容丟失了,你要嘗試恢復它。已知以下的三個事實:
1、對于1<=i<=n,都有a[i]>0,且所有的a[i]互不相同。即a數組保存的全部都是正整數,且互不相同。
2、x和y一定是屬于數組a,且x<y。
3、a數組是遞增的數組,且相鄰兩項的差是相等的。即數組a是等差數列。
容易發現,同時滿足上面三個條件的a數組不一定是唯一的。你要輸出使得a[n]的值最小的那個a數組,如果還不唯一,輸出使得a[1]的值最小的那個a數組。
輸入格式
多組測試數據。
第一行,一個整數T,表示有T組測試數據。1<=T<=100。
接下來有T行,每行3個整數:n,x,y。2<=n<=50。1<=x,y<=50。
輸出格式
共T行,每行n個整數。
輸入/輸出例子1
輸入:
5
2 1 49
5 20 50
6 20 50
5 3 8
9 13 22
輸出:
1 49
10?20 30?40 50
20?26 32 38 44 50
3 8?13?18?23
1 4?7 10 13 16 19 22 25?
我的答案:
#include<bits/stdc++.h>
using namespace std;
long long a,b,c,d,ans,shu[1000],qs,jg,s;
int main()
{scanf("%d",&a);for(int i=1;i<=a;i++){scanf("%d%d%d",&b,&c,&d);ans=10000000,qs=10000000,jg=10000000;for(int j=1;j<=c;j++){shu[1]=j;for(int k=1;k<=d-c;k++){s=0;if(shu[1]==c)s++;for(int l=2;l<=b;l++){shu[l]=shu[l-1]+k;if(shu[l]==c|shu[l]==d)s++;}if(s!=2)continue;if(shu[b]<ans){ans=shu[b];qs=j;jg=k;}}} shu[1]=qs;for(int j=2;j<=b;j++){shu[j]=shu[j-1]+jg;}for(int j=1;j<=b;j++){printf("%d ",shu[j]);}printf("\n");}return 0;
}