#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;
}
相关文章: