PAT 1038. Recover the Smallest Number
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
#include<vector>
#include<cmath>
#include<iomanip>
#include<algorithm>
using namespace std;
struct Node
{
char strNum[10];
bool isUsed;
};
//获得字典序最小的数字,321,32这种情况要特殊考虑。
string getMinStr(vector<Node> &v)
{
string strMin = "";
int i, index = -1, indexMin = -1;
for(i=0; i<v.size(); i++)
if(!v[i].isUsed)
{
strMin = v[i].strNum;
indexMin = i;
v[i].isUsed = true;
break;
}
for(i=0; i<v.size(); i++)
if(!v[i].isUsed && (v[i].strNum+strMin) < (strMin+v[i].strNum) )
{
strMin = v[i].strNum;
index = i;
}
if(index != -1 && index!=indexMin)
{
v[index].isUsed = true;
v[indexMin].isUsed = false;
}
return strMin;
}
int main()
{
Node node;
vector<Node> vNode;
int N,i;
// cin>>N;
scanf("%d",&N);
for(i=0; i<N; i++)
{
scanf("%s",node.strNum);
// cin>>node.strNum;
node.isUsed = false;
vNode.push_back(node);
}
string strNum = "";
string strTmp = getMinStr(vNode);
while( strTmp != "")//若相等,则表示所有的数据已经用完。
{
strNum += strTmp;
strTmp = getMinStr(vNode);
}
for(i=0; i<strNum.length(); i++)
if(strNum[i] != '0')
break;
//全部都为0的情况
if(i == strNum.length())
cout<<0<<endl;
else
{
for(;i<strNum.length(); i++)
cout<<strNum[i];
cout<<endl;
}
return 0;
}
多学习,多总结。

浙公网安备 33010602011771号