填数字(简单题,太无聊了,得水水题)

链接: https://www.nowcoder.com/acm/contest/128/F
来源:牛客网

题目描述

托米发现了一种新的游戏--填数字!
每填写一次数字(1≤ i≤9)需要花费a i枚金币,托米总共有n枚金币.
托米想知道他能得到的最大数字是多少.
如果填不了请输出-1。
不需要用完所有金币

输入描述:

第一行一个数字n,表示金币总数.
第二行9个正整数,第i个数字表示填写一次数字i所需要的金币数.

输出描述:

输出满足条件的最大数字.

#include <bits/stdc++.h>
using namespace std;
struct haha{
	int i;
	int s;
}we[10];
int n;
bool cmp(haha a,haha b){
	if(a.s==b.s) return a.i>b.i;
	return a.s<b.s;
}
void quicle(int w){
	int g=we[1].i,gg;
	int f=0;
	for(int i=1;i<=9;i++)
		if(we[i].s<=w+we[1].s){
			if(g<we[i].i){
				f=1;
				g=we[i].i;
				gg=w-we[i].s+we[1].s;
			}
		}
	printf("%d",g);
	n-=we[1].s;
	if(gg!=0 && f==1)
		quicle(gg); 
}
int main(){
	while(~scanf("%d",&n)){
		for(int i=0;i<=9;i++){
			we[i].i=i;
		}
		for(int i=1;i<=9;i++){
			scanf("%d",&we[i].s);
		}
		sort(we+1,we+10,cmp);
		int s=we[1].s;
		if(s>n){
			printf("-1\n");
			continue;
		}
		if(n%s==0){
			while(n){
				n-=s;
				printf("%d",we[1].i);
			}
			printf("\n");
		}
		else{
			int w=n%s;
			n-=w;
			quicle(w);
			while(n){
				n-=s;
				printf("%d",we[1].i);
			}
			printf("\n");
		}
	}
} 

猜你喜欢

转载自blog.csdn.net/doublekillyeye/article/details/80717414