Codeforces 489C Given Length and Sum of Digits

贪心可解,对于最大值来说只要从开始一直找最大的,对于最小值来说,先在第一位放1,然后倒推最后一位开始放9,最后如果到第一位还有剩余的话就直接加到第一位上去。

#include 
#include 
#include 
#include 
#include 
using namespace std;
char con[]={'0','1','2','3','4','5','6','7','8','9'};
char Max[1000];
char Min[1000];
int main(){
	int m,s;
	while(cin>>m>>s){
		memset(Max,'\0',sizeof(Max));
		memset(Min,'\0',sizeof(Min));
		if(s>m*9||s<1){
            if(s==0&&m==1)
                printf("0 0\n");
            else
                printf("-1 -1\n");
			continue;
		}
		int tmp=s;
		int pos=0;
		while(tmp>0){
			if(tmp>9){
				Max[pos]='9';
				tmp-=9;
			}
			else{
				Max[pos]=tmp+'0';
				tmp=0;
			}
			pos++;
		}
		for(int i=pos;i=0;i--){
			if(i==0){
				Min[i]=Min[i]+tmp;
                tmp=0;
			}
			else if(tmp!=0){
				if(tmp>9){
					Min[i]='9';
					tmp-=9;
				}
				else{
					Min[i]=tmp+'0';
                    tmp=0;
				}
			}
			else
				Min[i]='0';
		}
		printf("%s %s\n",Min,Max);
	}
	return 0;
}

你可能感兴趣的:(贪心)