题目描述
有一个数组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;
}
文章讲述了如何在给定三个条件(正整数、等差递增、包含特定区间元素)的情况下,找到满足条件的等差数列数组的最小值版本。程序通过计算找到最优解并输出数组元素。
2791

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



