题库-001
题库-001

#include<cstdio>
#include<algorithm>
using namespace std;
struct node
{
	int q;//表示价格 
	int p;//表示数字 
};
node c[11];//c[i].p表示第i个的数字价格,c[i].q表示第i个数字 
bool cmp(node a,node b)//用于sort函数将结构体排序 
{
	if(a.q!=b.q)
		return a.q<b.q;
	else
		return a.p>b.p;
}
int main()
{
	int n,digit;
	while(~scanf("%d",&n))
	{
		for(int i=1;i<=9;i++)
			scanf("%d",&c[i].q),c[i].p=i;
		sort(c+1,c+10,cmp);//按价格从小到大(相同则按数字从大到小)排 
		digit=n/c[1].q;//记录最大位数 
		if(digit==0)
			printf("-1\n");
		else
		{
			int rest=n-digit*c[1].q,maxx=c[1].p,k=0;//rest记录用最低价格的数字写了最大数字后剩下的钱
													//maxx表示当前位置所能写的最大数字
													//k表示已写数字的个数 
			while(1)
			{
				int temp=-1;//记录替换的数字的位置 
				maxx=c[1].p;
				for(int i=1;i<=9;i++)
				{
					if(rest+c[1].q>=c[i].q&&maxx<c[i].p)//有替换数字的条件(即使价格相等,但数字较大也要替换,故"="不可以省略) 
					{
						temp=i;
						maxx=c[i].p;
					}
				}
				if(temp==-1)//temp==-1表示没有可以替换的数字 
					break;
				rest=rest-c[temp].q+c[1].q;
				printf("%d",maxx);
				k++;
			}
			for(;k<digit;k++)//k是从0开始计算,不可加上"=" 
				printf("%d",c[1].p);
			printf("\n");
		}
	}
	return 0;
}

相关文章: