Простая задача
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.42] |
|
|
Правила раздела:
Простая задача
|
Сообщ.
#1
,
|
|
|
|
Архипростая задача - http://codeforces.ru/contest/538/problem/B
но короткое и красивое решение требует сил. Мое решение, правда на D: Скрытый текст ![]() ![]() import std.stdio; import std.range; import std.string; import std.algorithm; void main() { string s = readln.chomp; int n = s.reduce!max - '0'; n.writeln; n.iota.map!(i => s.map!(c => c > i + '0' ? "1" : "0").join.find!(c => c != '0')).join(" ").writeln; } |
|
Сообщ.
#2
,
|
|
|
|
Это моя первая задача там
Добавлено Вот тут нашел вырвиглазное перловое решение. Ничего не понимаю ![]() ![]() ![]() $_ = <>; $w = $_, y/1-9/0-8/, push @a, $w - $_ while - $_; print 0 + @a, "$/@a" |
|
Сообщ.
#3
,
|
|
|
|
Моё на плюсах. Думаю, при наличии чего-либо а-ля linq можно короче
![]() ![]() ![]() #include <iostream> #include <algorithm> #include <string> using namespace std; int main() { std::string str; cin >> str; cout << *std::max_element(str.begin(), str.end()) - '0' << std::endl; while(!str.empty()) { int i = 0; while(i < str.size() && str[i] == '0') ++i; int j = i; while(j < str.size()) { if(str[j] == '0') cout << '0'; else { cout << '1'; --str[j]; } ++j; } cout << " "; str = str.substr(i); } } |
|
Сообщ.
#4
,
|
|
|
|
Вот аналог моего дешного решения на плюсах:
![]() ![]() #include <iostream> #include <algorithm> #include <string> using namespace std; int main() { string str; cin >> str; char n = *std::max_element(str.begin(), str.end()); cout << n << endl; for(char i = '0'; i < n ; ++i) { auto zero = ""; for(int j = 0; j < str.length(); ++j) { if(str[j] > i) { cout << "1"; zero = "0"; } else { cout << zero; } } cout << " "; } } Добавлено Еще слегка упростил: ![]() ![]() #include <iostream> #include <algorithm> #include <string> using namespace std; int main() { string str; cin >> str; char n = *std::max_element(str.begin(), str.end()); cout << n << endl; for(char i = '0'; i < n ; ++i) { auto d = ""; for(int j = 0; j < str.length(); ++j) cout << (d = str[j] > i ? d = "1" : d[0] == 0 ? "" : "0"); cout << " "; } } |
|
Сообщ.
#5
,
|
|
|
|
Собственно идея простая, и думается везде вше именно она и реализована
Пара утверждений: 1. Любую десятичную цифру можно получить, просуммировав не более 9 раз в соответствующем разряде цифру "1". Суммирование "0" не оказывает влияния на результат. 2. Хотя цифру можно получить суммируя "1" в младшем разряде, это приводит к увеличению числа слагаемых сверх 9. Поэтому получаем алгоритм выписываем десятичную запись числа заменяем все цифры не являющиеся нулями на "1" выводим получившийся результат, как очередное слагаемое вычитаем значение слагаемого из числа если результат не ноль возвращаемся к началу алгоритма в результате получаем не более 9 слагаемых о первой цифре заботиться не надо, в десятичной записи она всегда ненулевая, кроме случая, когда число равно нулю |
|
Сообщ.
#6
,
|
|
|
|
Цитата applegame @ Вот тут нашел вырвиглазное перловое решение. Ничего не понимаю Автор Перловского исходника - обычный понторез. Дело в том, что Perl - язык достаточно свободного синтаксиса, чем и воспользовался автор, дабы затуманить мозги Цэ++ тру-кодерам Привожу более удобоваримый вариант на Перле:![]() ![]() $_ = <>; # читаем из STDIN строку в "базовый" скаляр, более наглядно: $_ = <STDIN> ; while (-$_) { # проверяем "минус базовый скаляр" не равер нулю $w = $_; # в переменную $w копируем значение базового скаляра y/1-9/0-8/; # в базовом скаляре транслируем цифры по правилу 9->8, 8->7 ... 1->0 push @a, $w - $_; # в массив @a заносим значение ($w -$_) } print 0 + @a, "$/@a" # распечатываем длину массива и его содержимое Небольшие разъяснения: 1) был использован "постфиксный" вариант while вместо "while($A==1) { $B=2 }" использовали аналог "$B=2 while $A==1", при этом опустив скобки в проверяемом выражении 2) вместо группировки наборов операторов в блок "{...}" - применили "операцию запятая" 3) использовав "стандартный скаляр" - избавились в строчке трансляции "y/1-9/0-8/" указания что именно транслируем Вот и вся кухня. Алгоритм виден по комментариям. Обожаю Перл, но осуждаю понторезов |
|
Сообщ.
#7
,
|
|
|
|
Цитата JoeUser @ Привожу более удобоваримый вариант на Перле |
|
Сообщ.
#8
,
|
|
|
|
А что не так?
|
|
Сообщ.
#9
,
|
|
|
|
Ну я особой разницы между
![]() ![]() $_ = <>; $w = $_, y/1-9/0-8/, push @a, $w - $_ while - $_; print 0 + @a, "$/@a" и ![]() ![]() $_ = <>; while (-$_) { $w = $_; y/1-9/0-8/; push @a, $w - $_; } print 0 + @a, "$/@a" Не вижу. В плане понятности. А вот за разъяснения и комментарии спасибо |
|
Сообщ.
#10
,
|
|
|
|
Ну ... я хрен его знает чего сказать
По мне второй вариант - конфетка в плане "понятности". Щя сек ... поищу на форуме давнишнюю свою тему по поводу Перла ... Добавлено Вот, прочитай тему. Вот тут эталонный туман. Добавлено Я об этом. Под рутом не запускать!!!! ![]() ![]() $??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see |
|
Сообщ.
#11
,
|
|
|
|
JoeUser, ты ж понимаешь, что кто-нибудь да запустит. Заикаешь если вдруг, будешь знать, из-за чего.
|
|
Сообщ.
#12
,
|
|
|
|
Скрытый текст Цитата Qraizer @ JoeUser, ты ж понимаешь, что кто-нибудь да запустит. Заикаешь если вдруг, будешь знать, из-за чего. Ну я ж спецом предупредил, вменяемым людям, ИМХО, этого достаточно. |
|
Сообщ.
#13
,
|
|
|
|
Цитата applegame @ короткое и красивое решение на D Пфф… =) ![]() ![]() import Data.Char toBinList [] = [] toBinList s = let (hd, tl) = part s in hd : toBinList (dropWhile (== '0') tl) part = unzip . map choose choose '0' = ('0','0') choose c = ('1', chr $ ord c - 1) main = do s <- getLine let l = toBinList s print $ length l putStrLn $ unwords l |
|
Сообщ.
#14
,
|
|
|
|
Приводить код на неведомом ЯП без комментов - моветон! Ящетаю.
|
|
Сообщ.
#15
,
|
|
|
|
Цитата JoeUser @ Приводить код на неведомом ЯП без комментов - моветон! Ящетаю. Скрытый текст Для applegame'а, на чей пост я отвечал, как и для большинства здесь отписавшихся, он вполне ведом, насколько я знаю. =) |
|
Сообщ.
#16
,
|
|
|
|
Сиравно - комменты рулят!
Добавлено Скрытый текст По поводу языка D - прямо щяз бы убежал и предал бы всех вас - одна засада, кроме как x32 - "D" ни где толком не работает. Не говоря уж о ARM. Он и интеловскую x64 тенет с багами. |
|
Сообщ.
#17
,
|
|
|
|
Цитата OpenGL @ Моё на плюсах. Думаю, при наличии чего-либо а-ля linq можно короче ![]() Интересный подход. Но, если ввести например число 100, то на экран выдаст 100. Хотя на сколько я понял из задания нужна именно сумма чисел. А как на счет еще проще задачи? Мне задача из первого поста, навеяла другую, более простую: Есть строка: "мама мыла раму" Необходимо перевернуть задом на перед, чтобы получилось: "раму мыла мама" Если использовать вектора и какие нибудь потоки, то задача решается в 4-5 строчек(возможно кто то придумает и того меньше). Это не интересно. Интересно другое, во сколько минимум строчек кода можно оформить эту задачу стандартными средствами языка(С/С++) безо всяких STL контейнеров и Сишных функций типа strtok, strstr, strcmp, strlen ит.п. |
|
Сообщ.
#18
,
|
|
|
|
Цитата KILLER @ во сколько минимум строчек кода можно оформить эту задачу стандартными средствами языка(С/С++) безо всяких STL контейнеров и Сишных функций типа strtok, strstr, strcmp, strlen ит.п. Очевидно, в одну. Как-то так:![]() ![]() char s[]="маман мыла краму"; // интереса и дебага ради for(int t=-1,l=0;t>-2;l++)if(s[l]==' '&&t<0)t=l;else if(!s[l]){for(--t,--l;t>=0;t--,l--)s[l]^=s[t],s[t]^=s[l],s[l]^=s[t];t--;} |
|
Сообщ.
#19
,
|
|
|
|
Это не в одну. Ты и программы так пишешь? Оформи пожалуйста нормально. Я ничего не понял. ';' - означает конец строки, условие - означает - конец строки, цикл - означает конец строки. Не мне тебя учить, надеюсь. Оформи нормально. Цель не написать все в одну строчку, цель - добиться минимального количества кода.
|
|
Сообщ.
#20
,
|
|
|
|
Цитата KILLER @ Не,лучше сдаться.Считайте,что я слил,если хочется. Оформи пожалуйста нормально. |
|
Сообщ.
#21
,
|
|
|
|
Цитата Славян @ Не,лучше сдаться.Считайте,что я слил,если хочется. ![]() Почему? Твое решение по сути правильное, но так как ты его оформил - никуда не годится. Выводы на экран или объявления переменных - к алгоритму не имеют никакого отношения. Поэтому оформи все нормально плз. |
|
Сообщ.
#22
,
|
|
|
|
Цитата KILLER @ Поэтому оформи все нормально плз. Не обижайтесь, KILLER, но я всё же пасану. Задачка скучная, а потому вся прелесть и могла бы быть коли в одну строку написать. А наводить марафет - выход за эту глупую 1-строчную белиберду - неинтересно. Да вы и сами можете нужных TAB'ов да ENTER'ов с пробелами куда хочется натыкать. |
|
Сообщ.
#23
,
|
|
|
|
Цитата Славян @ Не обижайтесь, KILLER, но я всё же пасану. Задачка скучная, а потому вся прелесть и могла бы быть коли в одну строку написать. А наводить марафет - выход за эту глупую 1-строчную белиберду - неинтересно. Да вы и сами можете нужных TAB'ов да ENTER'ов с пробелами куда хочется натыкать. ![]() Просто вся фишка в том, чтобы прийти к наименьшему количеству буков в решении этой задачи. То что ты написал в одну строку - несколько строк, потому что так разрешает компилятор - никуда не годится. Добавлено Цитата Славян @ а потому вся прелесть и могла бы быть коли в одну строку написать. Так если бы в одну строку было бы написано, никаких притензий и не было бы. А у Вас написано не в одну строку, а в псевдо-одну строку, которая одной строкой никак не может быть. Вы написали все в одну строку потому, что компилятор - дает вам такую возможность, не более. Добавлено Хотя с другой стороны, зачем кого то уламывать? Пусть все так и остается. Темболее у меня нет времени кого то уламывать или с кем то спорить. Как хотите так и оформляйте хоть в бинарном коде, хоть в брейнфаке... |
|
Сообщ.
#24
,
|
|
|
|
Цитата korvin @ Цитата applegame @ короткое и красивое решение на D Я такого не писал. Добавлено Цитата JoeUser @ Твои данные устарели. Под линупсом я давно и успешно кодю под x64. Под виндой с линкером MSVC тоже отлично компиляет под x64. C ARM не так хорошо, но таки работает http://wiki.dlang.org/LDC#ARM. По поводу языка D - прямо щяз бы убежал и предал бы всех вас - одна засада, кроме как x32 - "D" ни где толком не работает. Не говоря уж о ARM. Он и интеловскую x64 тенет с багами.Добавлено Цитата KILLER @ Так пойдет? Опять на D.Просто вся фишка в том, чтобы прийти к наименьшему количеству буков в решении этой задачи. То что ты написал в одну строку - несколько строк, потому что так разрешает компилятор - никуда не годится. ![]() ![]() import std.stdio; void main() { "мама мыла раму".dup.reverse.writeln; } |
|
Сообщ.
#25
,
|
|
|
|
Цитата applegame @ Так пойдет? Опять на D. Читер |
|
Сообщ.
#26
,
|
|
|
|
На питоне
![]() ![]() print("мама мыла раму"[::-1]) |
|
Сообщ.
#27
,
|
|
|
|
Цитата applegame @ Твои данные устарели. Под линупсом я давно и успешно кодю под x64 Возможно. Тогда еще вопросик. Какие либы используешь для GUI? Нашел подборочку, интересуют естественно нативные и работающие. Добавлено Что скажешь по поводу dlangui? |
|
Сообщ.
#28
,
|
|
|
|
Цитата applegame @ Так пойдет? Опять на D. Добавлю немножко Перла ![]() ![]() map {print "$_ "} reverse split " ", "мама мыла раму"; Добавлено или вот так: ![]() ![]() print join " ", reverse split " ", "мама мыла раму"; |
|
Сообщ.
#29
,
|
|
|
|
Цитата JoeUser @ Я не использую либы для GUI. Я в основном пишу серверы/клиенты (в основном web/rest-серверы и клиенты) и скрипты (вместо bash-скриптов). Но я пробовал пару недель назад любопытства ради DlanGUI и оно завелось под Win7 из коробки (использовал dub для сборки). Остальные я не пробовал. Но судя по датам обновлений большинство еще не заброшены. Возможно. Тогда еще вопросик. Какие либы используешь для GUI? Нашел подборочку, интересуют естественно нативные и работающие. Добавлено Сегодня, 07:28 Что скажешь по поводу dlangui? |
|
Сообщ.
#30
,
|
|
|
|
Вобщем, я в теме
, нароешь чего путного по "GUI + D" - маякни плс. Очень понравился язык! Почитал доки бегло - то, что доктор прописал! |
|
Сообщ.
#31
,
|
|
|
|
Цитата JoeUser @ Вобщем, я в теме , нароешь чего путного по "GUI + D" - маякни плс. Очень понравился язык! Почитал доки бегло - то, что доктор прописал! ![]() Есть мысль, что он уже умирает. А Rust видел? |
|
Сообщ.
#32
,
|
|
|
|
Цитата JoeUser @ Маякнул, для гуи DlangUI работает. И демка с тетрисом заработала и DlangIDE написанная тем же автором на тойже либе тоже заработала. Этого недостаточно? нароешь чего путного по "GUI + D" - маякни плс. Добавлено Цитата D_KEY @ Заблуждаешься. Посмотри на активность коммьюнити, разработчиков библиотек, развития альтернативных компиляторов - LDC, GDC и SDC.Есть мысль, что он уже умирает. Нет, о D можно многое сказать, но только не то что он умирает. Скорее наоборот. |
|
Сообщ.
#33
,
|
|
|
|
Цитата D_KEY @ А Rust видел? Слышал, но не читал. Гляну на досуге. |
|
Сообщ.
#34
,
|
|
|
|
Цитата D_KEY @ Видел, интересно, но отсутствие серьезного метапрограммирования отбивает охоту. А Rust видел? ![]() |
|
Сообщ.
#35
,
|
|
|
|
Цитата D_KEY @ А Rust видел? Кстати, как там с поддержкой Android & iOS, ну и процов отличных от ia32? |
|
Сообщ.
#36
,
|
|
|
|
Цитата applegame @ Нет, о D можно многое сказать, но только не то что он умирает. Скорее наоборот. Хорошо, скажем иначе. Он все никак не может родиться. Уже 14 лет как. Добавлено Цитата applegame @ Цитата D_KEY @ Видел, интересно, но отсутствие серьезного метапрограммирования отбивает охоту.А Rust видел? ![]() У них там полноценные макросы вообще-то. Чего тебе еще нужно? Меня, например, отсутствие исключений напрягает больше. |
|
Сообщ.
#37
,
|
|
|
|
Цитата D_KEY @ Не знаю, что по твоему пониманию - родиться. По мне так оно уже взрослое. Хорошо, скажем иначе. Он все никак не может родиться. Уже 14 лет как. |
|
Сообщ.
#38
,
|
|
|
|
Цитата D_KEY @ Меня, например, отсутствие исключений напрягает больше. Меня тоже, но панику можно перехватывать на границе потоков - для некоторых случаев как замена сгодится. Цитата applegame @ "мама мыла раму".dup.reverse.writeln; В условии требовалось получить "раму мыла мама", а не "умар алым амам". Вариант на расте: ![]() ![]() println!("{}", "мама мыла раму".split_whitespace().rev().collect::<Vec<_>>().connect(" ")); Немного коряво, знаю. Эффективнее было бы через fold, а не collect + connect, но так ещё многословнее. Вроде, connect для итераторов хотят сделать. Ну и оригинальная задача на расте: ![]() ![]() use std::io::BufRead; fn main() { let stdin = std::io::stdin(); let str: String = stdin.lock().lines().next().unwrap().ok().unwrap().to_string(); println!("{}", str.chars().max().unwrap().to_string().parse::<i32>().unwrap()); let mut num: i32 = str.parse().unwrap(); let summand: i32 = str.chars().map(|c| if c == '0' { '0' } else { '1' }).collect::<String>().parse().unwrap(); while num > summand { print!("{} ", summand); num -= summand; } while num > 0 { print!("1 "); num -= 1; } } |
|
Сообщ.
#39
,
|
|
|
|
Цитата DarkEld3r @ Косяк, да. В условии требовалось получить "раму мыла мама", а не "умар алым амам". ![]() Вот исправлено: http://dpaste.dzfl.pl/637bd988dc88 ![]() ![]() import std.stdio; import std.string; void main() { "мама мыла раму".split(" ").reverse.join(" ").writeln; } Добавлено Цитата DarkEld3r @ Ну вот как-то многословно, по сравнению с тем же D, перлом или питоном. А если сделают connect для итераторов (или таки пары итераторов, ака range?), то вот этого collect() в вектор не будет? Немного коряво, знаю. Эффективнее было бы через fold, а не collect + connect, но так ещё многословнее. Вроде, connect для итераторов хотят сделать. |
|
Сообщ.
#40
,
|
|
|
|
Цитата applegame @ Ну вот как-то многословно, по сравнению с тем же D, перлом или питоном. А если сделают connect для итераторов (или таки пары итераторов, ака range?), то вот этого collect() в вектор не будет? Да, collect пропадёт - он ещё многословно выглядит из-за необходимости указывать в какой контейнер собираем. Ну а без него будет практически как в D. Ну и нашёл уже стороннюю библиотеку с реализацией connect для итераторов, но решил, что "нечестно" использовать. В расте итераторы не плюсовые, то есть это не начало/конец, а начало + размер. Наверное, больше на range из D похожи. Если не в этом примере, а вообще, то немало многословности добавляют все эти unwrap. В такие моменты исключений особенно не хватает - даже если есть очень маленький шанс, что "что-то пойдёт не так" - в апи появляются Option/Result, чтобы дать обработать ошибку. Но имхо, это не всегда так страшно. |
|
Сообщ.
#41
,
|
|
|
|
Если так уж сильно хочется в одну строку...
![]() ![]() for (auto s : [](std::deque<std::string>&& d) { std::copy(std::istream_iterator<std::string>(std::istringstream("мама мыла раму") >> std::hex), std::istream_iterator<std::string>(), std::front_inserter(d)); return d; }(std::deque<std::string>())) std::cout << s << ' '; Добавлено То же самое, только не в одну строку. ![]() ![]() for (auto s : [](std::deque<std::string>&& d) { std::copy(std::istream_iterator<std::string>(std::istringstream("мама мыла раму") >> std::hex), // ввод фиктивный, чтобы кастануть r-value в l-value ссылку std::istream_iterator<std::string>(), std::front_inserter(d) ); return d; }(std::deque<std::string>()) ) std::cout << s << ' '; |
|
Сообщ.
#42
,
|
|
|
|
Блин, задача проста аки пять копеек, а кракозябров - в лучших традициях буста.
|
|
Сообщ.
#43
,
|
|
|
|
Цитата applegame @ Блин, задача проста аки пять копеек, а кракозябров - в лучших традициях буста. Не, на бусте будет как-то так(примерно) ![]() ![]() boost::copy("мама мыла раму" | boost::adaptors::tokenized(boost::regex("\\w+")) | boost::adaptors::reversed, std::ostream_itertor<std::string>(std::cout, " ")); |
|
Сообщ.
#44
,
|
|
|
|
На бусте неитересно. Эдак я и spirit подключу.
|
|
Сообщ.
#45
,
|
|
|
|
Да я в качестве защиты буста код привел
|
|
Сообщ.
#46
,
|
|
|
|
Цитата applegame @ Блин, задача проста аки пять копеек, а кракозябров - в лучших традициях буста. И не говори, во всех адекватных языках выглядит примерно одинаково приемлемо, а плюсы как всегда… ![]() ![]() main = putStrLn $ unwords $ reverse $ words "мама мыла раму" |
|
Сообщ.
#47
,
|
|
|
|
Цитата korvin @ Да ты просто не осилил плюсы! И не говори, во всех адекватных языках выглядит примерно одинаково приемлемо, а плюсы как всегда… ![]() Ана жабе кто-нибудь пример приведет? Там по-моему будет еще страшнее, чем в плюсах, или я не прав? |
|
Сообщ.
#48
,
|
|
|
|
Не, korvin, это как всегда захотелось выпендриться. Нормально если
![]() ![]() std::istringstream str("мама мыла раму"); std::vector<std::string> buf(std::istream_iterator<std::string>(str), std::istream_iterator<std::string>()); for (auto i = buf.rbegin(); i != buf.rend(); ++i) std::cout << *i << ' '; К тому же это почти C++98, только auto заменить на какой-нибудь std::vector<std::string>::const_reverse_iterator |
|
Сообщ.
#49
,
|
|
|
|
Цитата Qraizer @ Не, korvin, это как всегда захотелось выпендриться. Нормально если ![]() ![]() std::istringstream str("мама мыла раму"); std::vector<std::string> buf(std::istream_iterator<std::string>(str), std::istream_iterator<std::string>()); for (auto i = buf.rbegin(); i != buf.rend(); ++i) std::cout << *i << ' '; Да все равно же вырвиглазно. Самое красявое плюсовое решение привел, ИМХО, D_KEY на бусте. |
|
Сообщ.
#50
,
|
|
|
|
Вообще вы сравниваете скорее стандартные библиотеки(или встроенные в язык сложные типы), чем сами языки. На бусте примерно так же все выглядит.
Можем еще скорости посравнивать и посмотреть, победит ли C и насколько. |
|
Сообщ.
#51
,
|
|
|
|
Цитата D_KEY @ Ну с регекспами ты точно далеко не уйдешь Можем еще скорости посравнивать и посмотреть, победит ли C и насколько. Добавлено Цитата Qraizer @ ![]() ![]() std::istringstream str("мама мыла раму"); std::vector<std::string> buf(std::istream_iterator<std::string>(str), std::istream_iterator<std::string>()); for (auto i = buf.rbegin(); i != buf.rend(); ++i) std::cout << *i << ' '; Не компиляеццо, и я туплю не могу понять почему. Забыл уже плюсы. Поправьте кто-нибудь - http://ideone.com/ljftIF |
|
Сообщ.
#52
,
|
|
|
|
Цитата applegame @ Цитата D_KEY @ Ну с регекспами ты точно далеко не уйдешь Можем еще скорости посравнивать и посмотреть, победит ли C и насколько. ![]() Наверное. Но я про Си говорил, т.е. что-нить в духе: ![]() ![]() char str[] = "мама мыла раму"; char *p = str; while (*p) { if (*p == ' ') *p = '\0'; ++p; } --p; while (p != str) { if (*p == '\0') printf("%s ", (p + 1)); --p; } printf("%s\n", p); Я не проверял, мог ошибиться |
|
Сообщ.
#53
,
|
|
|
|
Цитата D_KEY @ Ну на таком низком уровне сяшка, полагаю, побьет по скорости всех. Наверное. Но я про Си говорил, т.е. что-нить в духе: |
|
Сообщ.
#54
,
|
|
|
|
Классическая ошибка http://ideone.com/y8CGcR Добавлено Кстати, это тоже не в пользу плюсов говорит. Добавлено И лучше так поправить, да http://ideone.com/99nicx Добавлено Заодно сишный вариант(надо же, сразу заработало, подозрительно) http://ideone.com/3K1ST6 |
|
Сообщ.
#55
,
|
|
|
|
Частное решение на самом деле. Заменяем пробелы например на точку с запятой - "мама;мыла;раму" и капец, так просто уже не получится. Или там где-то можно указать разделитель?
Добавлено Цитата D_KEY @ Заодно сишный вариант(надо же, сразу заработало, подозрительно) если программа заработала с первого раза - жди подвоха |
|
Сообщ.
#56
,
|
|
|
|
Цитата applegame @ Частное решение на самом деле. Заменяем пробелы например на точку с запятой - "мама;мыла;раму" и капец, так просто уже не получится. Или там где-то можно указать разделитель? Ты про какой из вариантов? |
|
Сообщ.
#57
,
|
|
|
|
Цитата D_KEY @ Про Qraizer'овский. Ты про какой из вариантов? |
|
Сообщ.
#58
,
|
|
|
|
Цитата applegame @ Цитата D_KEY @ Про Qraizer'овский.Ты про какой из вариантов? Да, вроде там просто так сепаратор не задашь в таком варианте. Но можно через std::getline сделать, например. |
|
Сообщ.
#59
,
|
|
|
|
Цитата applegame @ А я и не компилял. Не компиляеццо, и я туплю не могу понять почему. Забыл уже плюсы. Первый параметр нужно в скобочки взять.![]() ![]() std::vector<std::string> buf((std::istream_iterator<std::string>(str)), std::istream_iterator<std::string>()); |
|
Сообщ.
#60
,
|
|
|
|
Ну, как-то так:
![]() ![]() #include "stdafx.h" #include <stdio.h> #include <iostream> #include <vector> #include <algorithm> typedef std::vector<int> Digits; Digits split_to_digits(int input) { std::vector<int> digits; while (0 < input) { int next = input / 10; digits.push_back(input - next*10); input = next; } return digits; } int calc_closest_quasibin(int input) { int result = 0; Digits digits = split_to_digits(input); for(Digits::reverse_iterator it = digits.rbegin(); it != digits.rend(); ++it) { int D = *it; result *= 10; if (0 < D) ++result; } return result; } void print_int(int sum) { std::cout << sum << " "; } int _tmain(int argc, _TCHAR* argv[]) { int X; std::cin >> X; std::vector<int> summands; int B; do { B = calc_closest_quasibin(X); X -= B; summands.push_back(B); } while (0 < X); std::cout << summands.size() << std::endl; std::for_each(summands.begin(), summands.end(), print_int); return 0; } |
|
Сообщ.
#61
,
|
|
|
|
Mr.Delphist
Цитата fatal error: stdafx.h: No such file or directory Цитата error: '_TCHAR' has not been declared Цитата undefined reference to `main' |
|
Сообщ.
#62
,
|
|
|
|
Ну и мой вариант на Цэ++, не оригинально ... но как-то так
![]() ![]() #include <iostream> #include <sstream> #include <deque> using namespace std; int main() { string s; deque<string> deq; for(stringstream ss("мама мыла раму"); ss>>ws>>s; deq.push_front(s)); for(auto i:deq) cout << i << " "; } |
|
Сообщ.
#63
,
|
|
|
|
Цитата D_KEY @ fatal error: stdafx.h: No such file or directory Ну, это дефолтная строчка от Студии, ожидается для precompiled headers - можно снести смело Цитата D_KEY @ error: '_TCHAR' has not been declared Цитата D_KEY @ undefined reference to `main' А эта парочка - из студийного же шаблона в ожидании простой/юникодной командной строки. Меняем ![]() ![]() int _tmain(int argc, _TCHAR* argv[]) на каноничный ![]() ![]() int main() Должно заработать. Сорри, особо не заморачивался с кросс-компиляторностью ввиду позднего времени поста. |