Матч 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;

  }

};