Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/36: Рейтинг темы: голосов - 36, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 10.10.2019
Сообщений: 12

Поставить в начало последовательности нули, а затем единицы.

13.10.2019, 18:36. Показов 7101. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Последовательность a1, a2, ... an, состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.10.2019, 18:36
Ответы с готовыми решениями:

Поставить в начало последовательности нули, а затем единицы.
Последовательность а1, а2,..., аn, состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.

Поставить в начало последовательности нули, а затем единицы
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.

Массивы: поставить в начало последовательности нули, а затем единицы
(Массив)Последовательность a1, a2, …an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. ...

36
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
12.07.2024, 01:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Алексей1153 Посмотреть сообщение
посчитать сумму вектора - это быстрее
а почему ты думаешь, что там вектор? В условии ничего об этом не сказано. Ну а если каждый волен пофантазировать, то я говорю, что речь идет о битах и единички можно считать с помощью popcount (C++20) или майкрософтовских __popcnt16, __popcnt, __popcnt64 или __builtin_popcount, если GCC. Это будет быстрее, чем reduce для подсчета суммы вектора, ибо идет прямой вызов инструкции POPCNT.
0
1 / 1 / 0
Регистрация: 02.07.2024
Сообщений: 14
12.07.2024, 02:10
повар1, странный скрин у тебя, код скрыл и оставил только ошибку. Сам код поменял наверное
Миниатюры
Поставить в начало последовательности нули, а затем единицы.  
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,247
12.07.2024, 02:48
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    char one[] = "1010001010111101010111000101010101111001";
    char two[125]{};
    short i{};
    while (*(one+i++) != '\0')
        if (one[i]==48)strncat(two, (const char*)(one+i), 1);
    while (i-->0)
        if (one[i]==49)strncat(two, (const char*)(one+i), 1);
    std::printf("%s\n", two);
    std::getchar();
    return 0;
}
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
12.07.2024, 07:56
Цитата Сообщение от Royal_X Посмотреть сообщение
а почему ты думаешь, что там вектор
а кто мешает его сделать?
Даже если там файл, то можно читать в массив/вектор и так же суммировать.
Цитата Сообщение от Royal_X Посмотреть сообщение
__popcnt16, __popcnt, __popcnt64 или __builtin_popcount, если GCC.
ничего этого не нужно, достаточно указать в алгоритмах правильную политику распараллеливания
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
12.07.2024, 10:50
Алексей1153, вместо вашего кода(вызвавшего дискусию) всего то надо записать одну строчку
C++
1
std::sort(vec.begin(),vec.end());
Снова считать не надо единички и нолики
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
12.07.2024, 11:04
повар1, сортировка - это тоже долго и не линейно. По условию там одни нолики и единички
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
12.07.2024, 11:12
Цитата Сообщение от Алексей1153 Посмотреть сообщение
там одни нолики и единички
Нельзя отсортировать по вашему мнению?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.07.2024, 12:13
Цитата Сообщение от повар1 Посмотреть сообщение
Нельзя отсортировать по вашему мнению?
Можно. Только неэффективно.
Можно применить сортировку подсчетом, что и делается.
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
12.07.2024, 12:21
повар1, можно конечно. Ещё есть std::partition
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
12.07.2024, 13:31
Цитата Сообщение от Алексей1153 Посмотреть сообщение
ничего этого не нужно, достаточно указать в алгоритмах правильную политику распараллеливания
все равно, твой метод медленнее, чем мой, какую бы политику ты бы не указывал. Кстати, конкретно в твоем случае, seq быстрее, чем par. Я протестировал на моем проце с 14 ядрами и 20 потоками.

std::popcount оказался быстрее более 20 раз твоего reduce с политикой seq, а вот про par даже не пишу, чтобы плакать не пришлось))

в тестах использовал твои числа

C++
1
std::vector<int> v{ 1,0,1,0,0,1,0,1,0 };
и
C++
1
auto x = std::bitset<9>("101001010").to_ulong();
вызывал миллион раз reduce для вектора и popcount для беззнакового длинного числа без оптимизации

Хорошая новость в том, что с оптимизацией, какой бы метод не выбрать, даже сортировку, код выполняется настолько быстро, что вся твоя болтовня о скорости нивелируется и не имеет смысла. Так что хватит тут чужие коды браковать и рассказывать, какие они медленные.
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
12.07.2024, 13:55
Цитата Сообщение от Royal_X Посмотреть сообщение
seq быстрее
само собой, что векторизация для данной задачи быстрее, чем создание потоков

Цитата Сообщение от Royal_X Посмотреть сообщение
в тестах использовал твои числа
это не мои числа. Мои числа тут были бы мегабайта на 4

Добавлено через 37 секунд
Цитата Сообщение от Royal_X Посмотреть сообщение
с оптимизацией
само собой, что с ней нужно измерять
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
12.07.2024, 14:02
Цитата Сообщение от Алексей1153 Посмотреть сообщение
само собой, что с ней нужно измерять
с оптимизацией умный компилятор настолько меняет всё (даже саму первоначальную идею погромиста), что
Цитата Сообщение от Royal_X Посмотреть сообщение
какой бы метод не выбрать, даже сортировку, код выполняется настолько быстро, что вся твоя болтовня о скорости нивелируется и не имеет смысла. Так что хватит тут чужие коды браковать и рассказывать, какие они медленные.
Вся суть моей критики в том, что все вышеприведенные алгоритмы заслуживают внимания и что не нужно их браковать, рассказывая о скорости, тем более, если идет речь о кодах с оптимизацией
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
12.07.2024, 14:05
Цитата Сообщение от Royal_X Посмотреть сообщение
акой бы метод не выбрать, даже сортировку, код выполняется настолько быстро
а ты уже опробовал это на мегабайтных векторах?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3039 / 1055
Регистрация: 01.06.2021
Сообщений: 11,587
12.07.2024, 14:19
Цитата Сообщение от Алексей1153 Посмотреть сообщение
а ты уже опробовал это на мегабайтных векторах?
у ТС не написано о количестве элементов в последовательности, следовательно, каждый волен брать сколько угодно чисел. Ты взял 9 элементов и показал некий волшебный код, подав это в таком соусе, мол коды остальных говно, а твой прям идеальный. Я же написал, что для этих конкретных 9 элементов можно и быстрее, так что лучше молчать о скорости.
И почему не опробовать сразу на гигабайтных векторах))

Добавлено через 6 минут
Алексей1153, кстати, есть и vec_popcnt, если что, + различные библиотеки, которые задействуют инструкцию popcnt для вектора битов

кстати, посмотрел, оказывается мой проц поддерживает avx2 и bmi2, так что можно что-то покруче даже сделать, чем решение на popcnt
0
фрилансер
 Аватар для Алексей1153
6496 / 5727 / 1133
Регистрация: 11.10.2019
Сообщений: 15,293
12.07.2024, 14:31
Цитата Сообщение от Royal_X Посмотреть сообщение
подав это в таком соусе, мол коды остальных говно
это твои фантазии, я такого не писал
0
 Аватар для Наталья8
623 / 381 / 67
Регистрация: 09.03.2016
Сообщений: 4,247
12.07.2024, 15:44
Цитата Сообщение от Royal_X Посмотреть сообщение
твой метод медленнее, чем мой
А я не думаю, что мой код (который выше) сильно медленнее.
Я просто написал, и ни чего не думаю.

Добавлено через 5 минут
Проблема выеденного яйца не стоит.
Написать на каких то костылях, и вести дискуссии, у кого они быстрее?

Добавлено через 53 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    std::string jne{"1000011101010001111010"};//
    short count = jne.length(), cnt{};
while (count--) {
        if (jne[0] == 48)jne += "0";
        else ++cnt;
        jne.erase(0, 1);
    }
while (cnt--)jne += "1";
 
std::printf("%s\n", jne.c_str());
    return 0;
}
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
12.07.2024, 18:29
Цитата Сообщение от Наталья8 Посмотреть сообщение
Написать на каких то костылях, и вести дискуссии, у кого они быстрее?
Про быстрее: тут прицепились к небольшому замечанию.
Тут дело не в быстроте, а в "чистоте" кода.

Добавлено через 1 минуту
Да пусть себе будут все варианты, но только рабочие.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2024, 18:29

Поставьте в начало этой последовательности нули, а затем единицы. Подсчитайте количество нулей и единиц
Создайте одномерный массив, представляющий собой последовательность из нулей и единиц (через функции формирования случайного числа)....

Последовательность a1, a2, . a3n состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем е
Последовательность a1, a2, ... a3n состоит из нулей и едениц. Поставить в начало этой последовательности нули, а затем еденицы.

Поставить в начало этой последовательности нули, а затем единицы
Последовательность a1, a2, ..., аn состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. Вывести...

Поставить в начало последовательности нули, а затем единицы
Вариант 4. Последовательность a1, a2, …,an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.

Поставить в начало последовательности нули, а затем единицы.
Последовательность а1, а2,..., аn, состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru