PAT A1038 Recover the Smallest Number (30分)

前言

传送门

正文

PAT A1038 Recover the Smallest Number (30分)_第1张图片

参考题解

#include
#include
#include
#include
using namespace std;
/*
给定n个数字,每个数字位数不超过8位,现在需要将这n个数字按照某个顺序排列起来,
使得排列后形成的新的数字的值是最小的,并输出这个最小的数字。 

贪心策略:
对于字符串s1和s2,若时s1+s2
const int N=1e4+10;
string str[N],res;
int n; 
bool cmp(string a,string b){
	return a+b<b+a;
}
int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++)cin>>str[i];
	sort(str,str+n,cmp);
	for(int i=0;i<n;i++)res+=str[i];
	int len=res.size(),i=0; 
	/*去除前导0两种方式*/
	//while(i
	//if(i==len)cout<<"0"<
	//else cout<
	
	while(res.size()!=0&&res[0]=='0')res.erase(res.begin()); 
	if(res.size()==0)cout<<"0"<<endl;
	else cout<<res<<endl;

	return 0;
}

你可能感兴趣的:(PAT甲级)