前言:
讲述洛谷P1012 [NOIP1998 提高组] 拼数问题(c++),本人初学c++,不太会用封装,继承,以及创建类。保留了许多的c语言的语言。望读者见谅。
解题方法:用了STL中的vector容器,和其提供的sort算法,也用了string类。以达到简化思路。
提示:以下是本篇文章正文内容,下面案例可供参考
一、解题思路
利用string的比较, 即是string a + b 与string b + a 比较,然后用sort排序。
举例:a = "32", b = "4";
a + b = "324"; b + a = "432"; 所以两两结合排序,最后输出最大值。
二、使用步骤
1.将数组中int变为string。
代码如下(示例):
vector<string>& transform(vector<int> v)
{
static vector<string> f; //静态局部变量, 因为要将结果带回去。
for (int i = 0; i < v.size(); i++)
{
auto pos = to_string(v[i]); //to_string()将int->string.
f.push_back(pos);
}
return f;
}
2.排序
代码如下(示例):
sort(d.begin(), d.end(), cmp);
sort()函数有三个参数, 分别为v.begin(), v.end(), cmp
cmp为函数名, 是排序规则。
3整体代码
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string>& transform(vector<int> v)
{
static vector<string> f;
for (int i = 0; i < v.size(); i++)
{
auto pos = to_string(v[i]);
f.push_back(pos);
}
return f;
}
int cmp(string& a, string& b)
{
return a + b > b + a;
}
void show(vector<string> v)
{
for (int i = 0; i < v.size(); i++)
cout << v[i];
cout << endl;
}
void test01()
{
vector<int> v;
vector<string> d;
int n = 0;
cin >> n;
int elem = 0;
for (int i = 0; i < n; i++)
{
cin >> elem;
v.push_back(elem);
}
d = transform(v);
sort(d.begin(), d.end(), cmp);
show(d);
}
int main()
{
test01();
return 0;
}
反思:
第一次写博客, 请各位大佬指正。