文本中包含数的个数不超过 500,然后我开了个数组 string a[505];
然后 2 个点 RE,3 个点 UKE。
改成 string a[1505];
竟然就过了。这是为什么啊(附上当时的数组过小的代码)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int MAX = 505;
string a[MAX];
bool cmp(string x,string y)
{
if(x.size() != y.size()) return x.size() < y.size();//数位不同
else return x < y;//数位相同
}
int main()
{
int n,k = 0;
string str,tmp;
cin>>n;
for(int i = 1;i <= n;i++)
{
cin>>str;tmp = "";//初始化
bool ok = 0;//数字有无出现
for(int j = 0;j < str.size();j++)
{
if('0' <= str[j] && str[j] <= '9') tmp += str[j],ok = 1;//数字出现
else
{
if(ok) a[++k] = tmp;//加入答案
tmp = "",ok = 0;//清0
}
}
if(ok) a[++k] = tmp;//加入答案
}
for(int i = 1;i <= k;i++)//删去前导0
{
tmp = "";bool ok = 0;//初始化
for(int j = 0;j < a[i].size();j++)
{
if(a[i][j] != '0') ok = 1;//第一个不为0的数字
if(ok) tmp += a[i][j];//记录有效数位
}
if(ok) a[i] = tmp;//赋值
else a[i] = '0';//为0的特殊情况
}
sort(a + 1,a + k + 1,cmp);
for(int i = 1;i <= k;i++) cout<<a[i]<<endl;
return 0;
}