2020小学甲组--恢复数组

文章讲述了如何在给定三个条件(正整数、等差递增、包含特定区间元素)的情况下,找到满足条件的等差数列数组的最小值版本。程序通过计算找到最优解并输出数组元素。
摘要由CSDN通过智能技术生成

题目描述

有一个数组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;
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值