Матч
255, Последовательность чисел (SequenceOfNumbers)
Дивизион 2, Уровень 1
Имеется массив строк,
отсортированных лексикографически. Каждая строка в массиве содержит только
цифры. То есть каждую строку можно трактовать как число. Необходимо
отсортировать строки массива как числа по возрастанию.
Класс: SequenceOfNumbers
Метод: vector<String>
rearrange(vector<String> sequence)
Ограничения:
sequence содержит от 2 до 50 элементов, каждый элемент sequence содержит
цифры от 0 до 9 и не начинается с 0.
Вход. Массив лексикографически отсортированных строк sequence.
Выход. Массив строк, отсортированных как числа по возрастанию.
Пример входа
sequence |
{"1","174","23","578","71","9"} |
{"172","172","172","23","23"} |
{"183","2","357","38","446","46","628","734","741","838"} |
Пример выхода
{"1",
"9", "23", "71", "174",
"578"}
{"23",
"23", "172", "172", "172"}
{"2",
"38", "46", "183", "357",
"446", "628", "734", "741",
"838"}
РЕШЕНИЕ
сортировка
Отсортируем массив строк при
помощи функции sort и собственной функции сортировки
f. Функция int f(string a, string b) возвращает истину, если число, записанное в строке a, меньше числа, хранящегося в строке b. Функция atoi преобразовывает
символьный массив цифр в число.
ПРОГРАММА
#include <cstdio>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int f(string a, string b)
{
return (atoi(a.c_str()) <
atoi(b.c_str()));
}
class SequenceOfNumbers
{
public:
vector<string> rearrange(vector<string> sequence)
{
sort(sequence.begin(),sequence.end(),f);
return sequence;
}
};