0
点赞
收藏
分享

微信扫一扫

par贪心算法A1038Recover the Smallest Number

转角一扇门 2022-04-13 阅读 48

总结:
1.拼接的字符串最小,可以比较s1+s2 s2+s1的大小,来确定s2和s1谁应该放在最前面
2.利用erase操作删除前置0

#include <iostream>
#include<string>
#include<stdlib.h>
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<string.h>
//1038 Recover the Smallest Number 
/*
题目大意:
给与一些数字, { 32, 321, 3214, 0229, 87 }
组成最小的数字
输入:
n个数字 数字小于10000 可以用字符串保存 
思路:
 1.每一次都是开头最小的数字放在前面,若数字第一位相同;
 则比较第二位,依次类推
 由于数字按照字符输入,则可以直接比较字典顺序,结果错误,因为32 321 3214无法区分
 2.将数字从小到大排序;设置目前最小首位数字
 
 
 算法笔记:
 阅读算法笔记后,得到数字拼凑贪心算法策略
 若s1+s2<s2+s1则应该把s1放在前面 
 

*/
using namespace std;
bool cmp(string a,string b)
{
	
    return a+b<b+a;
}
int main() {
  int n;
  cin>>n; 
  string s[n];
  for(int i=0;i<n;i++)
  {
  	cin>>s[i];
   } 
   sort(s,s+n,cmp);
   string output;
   for(int i=0;i<n;i++)
   {
   	output+=s[i];
   }
   while(output.size()!=0&&output[0]=='0')
   output.erase(output.begin());
   if(output.size()==0)cout<<0<<endl;
   else cout<<output;
 
  
	system("pause");
	
}
举报

相关推荐

0 条评论