本文主要是介绍2020小学甲组--恢复数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
有一个数组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;
}
这篇关于2020小学甲组--恢复数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!