Форум программистов, компьютерный форум, киберфорум
acmades
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

С++ «Неделя вторая - Алгоритмы - Сортировка целых чисел по модулю, Сортировка без учета регистра» #16

Запись от acmades размещена 05.08.2017 в 22:56
Показов 45359 Комментарии 7

Идем дальше. Курс: «Основы разработки на C++: белый пояс»
Начало в начале блога ))))
Сортировка целых чисел по модулю
Задание:
В стандартном потоке дана одна строка, состоящая из N + 1 целых чисел. Первым числом идёт само число N. Далее следуют ещё N чисел, обозначим их за массив A. Между собой числа разделены пробелом.
Отсортируйте массив А по модулю и выведите его в стандартный поток.

Ограничения
0 <= N <= 1000
-1000000 <= A[i] <= 1000000

Примеры
Вход - > Выход
2 -4 3 -> 3 -4
3 1 -3 2 -> 1 2 -3

Моё решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
int main() {
    int N, num;
    vector<int> v; //тут храним введенные числа
    cin >> N; //узнаем количество чисел
    for (N; N > 0; --N) {
        cin >> num; //считываем числа
        v.push_back(num); //добавляем в вектор
    }
    //для сортировки используем изученную функцию sort
    //в качестве параметра сортировки будет лямбда-функция (третий аргумент)
    sort(begin(v), end(v), [](const int& x, const int& y) {
        //в уроках до этого не было рассказано о функции нахождения модуля...
        //а писать свою неохота было, поэтому просто спросил инет про модуль, выдал - abs()
        return abs(x) < abs(y); //сортировка будет от меньшего к большему (по модулю)
    });
    for (const auto& i : v) { 
        cout << i << " "; //выводим отсортированные числа
    }
    return 0;
}
тут добавить нечего.

Сортировка без учета регистра
Задание:
В стандартном потоке дана одна строка, состоящая из числа N и следующих за ним N строк S. Между собой число и строки разделены пробелом.
Отсортируйте строки S в лексикографическом порядке по возрастанию, игнорируя регистр букв, и выведите их в стандартный поток вывода.

Ограничения
0 <= N <= 1000
1 <= |S| <= 15
Каждая строка S[i] может состоять из следующих символов: [0-9,a-z,A-Z]
Примеры
stdin - > stdout
2 q A -> A q
3 a C b -> a b C

Моё решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cctype> //для transform
using namespace std;
string str_to_low(const string& s) { //перевод строки в нижний регистр
    string result;
    for (auto i : s) { //все буквы
        result += tolower(i); //вставляем в новую строку в нижнем регистре
    }
    return result; //возвращаем новую строку в нижнем регистре
}
bool srt(string x, string y) {
    //по хорошему использовать бы функцию transform
    //трансформирования строки и перевести все символы в нижний регистр
    /*transform(x.begin(), x.end(), x.begin(), tolower);
    transform(y.begin(), y.end(), y.begin(), tolower);
    return x < y;*/
    //но проверку не пройдет(не знаю почему), поэтому...
    return str_to_low(x) < str_to_low(y); //сортировка будет от меньшего к большему (без учета регистра)
}
int main() {
    int N;
    string str;
    vector<string> v; //тут храним введенные строки
    cin >> N; //узнаем количество строк
    for (N; N > 0; --N) {
        cin >> str; //считываем строки
        v.push_back(str); //добавляем в вектор
    }
    //для сортировки используем изученную функцию sort
    sort(begin(v), end(v), srt);
    for (const auto& i : v) {
        cout << i << " "; //выводим отсортированные строки
    }
    return 0;
}
Всё получилось ))))
Продолжение следует...
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 7
Комментарии
  1. Старый комментарий
    А как вам такой вариант, он очень схож с вашим, но мне кажется, что писанины чуть меньше.
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    #include <vector>
    #include <iostream>
    #include <algorithm>
    #include <string>
    using namespace std;
    string Decrease(string& s) { // тут все как у вас, пишу доп. функцию
        string tomain;
        for (auto& i : s) {
            tomain += tolower(i);
        }
        return tomain;
    }
     
    int main()
    {
        int quantity;// кол-во вводимых значений
        string SortingString;// сами значения
        vector <string> AddingDatabase; //куда без вектора, хотел через множества, но я не стал разбираться с найстройкой сортировки
        cin >> quantity;
        for (; quantity > 0; quantity--) {
            cin >> SortingString;
                    AddingDatabase.push_back(SortingString);
        } sort(begin(AddingDatabase), end(AddingDatabase), []( string& str1,  string& str2) {
            return Decrease(str1) < Decrease (str2); /* вот тут и значительные изменения, не стал выносить все в отдельную функцию, а просто сделал лямбду*/
        }); // ну а дальше все проще пареной репы
        for (const auto& item : AddingDatabase) {
            cout << item << " ";
        }
     
        return 0;
    }
    Запись от Albatrosso размещена 08.08.2017 в 11:43 Albatrosso вне форума
  2. Старый комментарий
    Цитата Сообщение от Albatrosso
    А как вам такой вариант, он очень схож с вашим, но мне кажется, что писанины чуть меньше.
    Да нет )))) писанины столько же. У меня комментариев много просто. Функцию srt тоже мог вынести в "лямбду", но если комментарии убрать, то кода почти столько же (разница в пару слов). Кроме того я просто хотел показать, что можно вообще обойтись без дополнительной функции str_to_low, но по какой то причине coursera не хочет принимать transform(может на данном этапе не предусмотрено или я накосячил).
    Запись от acmades размещена 08.08.2017 в 16:50 acmades вне форума
  3. Старый комментарий
    Цитата Сообщение от acmades
    Да нет )))) писанины столько же. У меня комментариев много просто. Функцию srt тоже мог вынести в "лямбду", но если комментарии убрать, то кода почти столько же (разница в пару слов). Кроме того я просто хотел показать, что можно вообще обойтись без дополнительной функции str_to_low, но по какой то причине coursera не хочет принимать transform(может на данном этапе не предусмотрено или я накосячил).
    скорее дело в косяке, курсера приняла у меня min на первой неделе, когда нужно было найти минимальную из строк, а значит им побоку как мы решаем задачи, им важно чтобы мы соблюли все условия. Если бы было указано, что transform использовать нельзя, то так оно и было бы.
    Запись от Albatrosso размещена 11.08.2017 в 10:17 Albatrosso вне форума
  4. Старый комментарий
    полагаю, что продолжения у блога не будет, жаль. На первых парах ваши посты лично мне очень помогли. Именно из ваших постов я очень много полезного узнал.
    Запись от Albatrosso размещена 20.08.2017 в 18:29 Albatrosso вне форума
  5. Старый комментарий
    Цитата Сообщение от Albatrosso
    полагаю, что продолжения у блога не будет, жаль. На первых парах ваши посты лично мне очень помогли. Именно из ваших постов я очень много полезного узнал.
    Будет ))) Завтра выложу еще 2 недели учебы.
    Запись от acmades размещена 20.08.2017 в 19:02 acmades вне форума
  6. Старый комментарий
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    #include <iostream>
    #include <vector>
    #include <algorithm>
     
    using namespace std;
     
    bool gt_abs(int i,int j) { 
        return (abs(i)<abs(j)); 
    }
     
     
    int main(){
        int n = 0;
        cin >> n;
        int temp = 0;
        vector<int> v;
        for (int i=0;i<n;i++){
            cin >> temp;
            v.push_back(temp);
        }
        sort(v.begin(),v.end(),gt_abs);
        for (int i=0;i<v.size();i++){
            cout << v.at(i)<<" ";
        }
        return 0;
    }
    Запись от flash_back размещена 23.10.2017 в 13:04 flash_back вне форума
  7. Старый комментарий
    C++
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <ctype.h>
     
    using namespace std;
     
    string str_low(string s){
        transform(s.begin(), s.end(), s.begin(), tolower);
        return s;
    }
     
    bool gt_abs(string s1,string s2) { 
        return (str_low(s1)<str_low(s2)); 
    }
     
    int main(){
        int n = 0;
        cin >> n;
        string temp = "";
        vector<string> v;
        for (int i=0;i<n;i++){
            cin >> temp;
            v.push_back(temp);
        }
        
        sort(v.begin(),v.end(),gt_abs);
     
        for (int i=0;i<v.size();i++){
            cout << v.at(i)<<" ";
        }
     
        return 0;
    }
    Запись от flash_back размещена 23.10.2017 в 13:18 flash_back вне форума
 
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru