Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию?
Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
1613 г. = 2024 г.
Re: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, RussianFellow, Вы писали:
RF>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
Здравствуйте, Miroff, Вы писали:
M>Здравствуйте, RussianFellow, Вы писали:
RF>>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
M>FizBuzz
"Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”."
Код на C++ :
#include <stdio.h>
for (int i=0; i<=100; i++)
{
if (i==((i/15)*15))
{
printf("FizzBuzz\n");
}
else
{
if (i==((i/3)*3))
{
printf("Fizz\n");
}
else if (i==((i/5)*5))
{
printf("Buzz\n");
}
else
{
printf("%d\n",i);
}
}
}
Так, что ли?
1613 г. = 2024 г.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, Miroff, Вы писали:
M>Здравствуйте, RussianFellow, Вы писали:
RF>>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
M>FizBuzz
Ясно.
А как с задачами создания стека, очереди, дека без использования STL, MFC и других библиотек?
А как с задачей создания и обхода бинарного дерева?
А как с задачами работы со списком--разворот, сортировка?
1613 г. = 2024 г.
Re: Типовые задачи на собеседованиях по программированию с решениями
hackerrank — там не дают примеров решения сразу, но дают достаточно информации чтоб добраться до ответа самостоятельно. После того как твое решение проходит нужные тесты можешь смотреть как эту задачу решают другие. В общем полезный ресурс, сам на нем практикуюсь.
Re: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, RussianFellow, Вы писали:
RF>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.) https://leetcode.com/
Удвой число ошибок, если не получается добиться цели.
Re: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, b0r3d0m, Вы писали:
B>вы напрочь забыли о том, что 3/3*3 вовсе не обязательно равняется 3.
забывать там нечего. Деление целых чисел в C — всегда целочисленное
Re[5]: Типовые задачи на собеседованиях по программированию с решениями
B>>вы напрочь забыли о том, что 3/3*3 вовсе не обязательно равняется 3. N>забывать там нечего. Деление целых чисел в C — всегда целочисленное
Тем более.
Re[6]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, b0r3d0m, Вы писали:
B>>>вы напрочь забыли о том, что 3/3*3 вовсе не обязательно равняется 3. N>>забывать там нечего. Деление целых чисел в C — всегда целочисленное B>Тем более.
поясните? для целей это задачи указанный способ подходит. (хотя, % конечно лучше и быстрее)
Re[7]: Типовые задачи на собеседованиях по программированию с решениями
N>поясните? для целей это задачи указанный способ подходит. (хотя, % конечно лучше и быстрее)
Лол. Что ж, это я задание неправильно прочитал, извиняюсь. Про operator% всё ещё актуально, а остальное нафиг.
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
N>Есть посвященная как раз этому книга Cracking the Coding Interview.
Там вот в оценках мнения разделились. Можно комментариев? Она не священная вообще? Священная, но с оговорками? Cвященная, только в определенных частях cвета?
Книгу читал и не осуждаю.
Re[8]: Типовые задачи на собеседованиях по программированию с решениями
The "Fizz-Buzz test" is an interview question designed to help filter out the 99.5% of programming job candidates who can't seem to program their way out of a wet paper bag. The text of the programming assignment is as follows:
А как "to program their way out of a wet paper bag" переводится? Не могут запрограммировать выход из мокрого бумажного мешка?
Из этого перевода дальше будет следовать, кого она таки отсеивает.
Потому что не суметь решить её — я не знаю, как надо вообще не уметь программировать для этого. Её даже школьники решат, причем троечники тоже, имхо. ))
Может, это 99.5% индусов не могут её решить?
Re[5]: Типовые задачи на собеседованиях по программированию
Здравствуйте, alzt, Вы писали:
A>Здравствуйте, RussianFellow, Вы писали:
A>Я бы переписал сл. образом.
A>
A>#include <stdio.h>
A>for (int i=1; i<=100; i++)
A>{
A> bool mul3 = (i%3)==0;
A> bool mul5 = (i%5)==0;
A> if(mul3 && mul5) printf("FizzBuzz\n");
A> else if(mul3) printf("Fizz\n");
A> else if(mul5) printf("Buzz\n");
A> else printf("%d\n",i);
A>}
A>
Если цели написать эффективный код нету, то всё нормально (только у нас во всех стайл-гайдах на всех работах инструкцию после условий надо с новой строки писать — иначе очень трудно отладчиком будет ходить; а чаще еще и со скобками).
Можно сэкономить на делениях (оно дорогое вообще-то):
for (unsigned i = 1, counter3 = i, counter5 = i; i <= 100; ++i, ++counter3, ++counter5)
{
if (counter3 == 3)
{
counter3 = 0;
}
if (counter5 == 5)
{
counter5 = 0;
}
if (counter3 == 0 && counter5 == 0)
{
std::cout << "mod15" << std::endl;
}
else if (counter3 == 0)
{
std::cout << "mod3" << std::endl;
}
else if (counter5 == 0)
{
std::cout << "mod5" << std::endl;
}
else
{
std::cout << i << std::endl;
}
}
Здравствуйте, antonio_banderas, Вы писали: _>Если цели написать эффективный код нету, то всё нормально (только у нас во всех стайл-гайдах на всех работах инструкцию после условий надо с новой строки писать — иначе очень трудно отладчиком будет ходить; а чаще еще и со скобками). _>Можно сэкономить на делениях (оно дорогое вообще-то):
Здравствуйте, kaa.python, Вы писали:
KP>А где это такие дикие требования встречаются?! И вообще, зачем отладчик в 21 веке, всё легко и изящно решается юнит-тестами и логами
Отладчиком может быть быстрее. Зависит от вариативности входных данных. Экспоненциальный рост количества юнит-тестов никто не отменял.
Re[6]: Типовые задачи на собеседованиях по программированию
Здравствуйте, antonio_banderas, Вы писали:
_>Если цели написать эффективный код нету, то всё нормально (только у нас во всех стайл-гайдах на всех работах инструкцию после условий надо с новой строки писать — иначе очень трудно отладчиком будет ходить; а чаще еще и со скобками).
Придирки к форматированию это почти как придирки к орфографии.
_>Можно сэкономить на делениях (оно дорогое вообще-то):
Оно вообще ничего не стоит. Пользователи не заметят, если ты этот цикл вообще уберёшь.
Этот пример преждевременной оптимизации, которую не надо делать.
_> for (unsigned i = 1, counter3 = i, counter5 = i; i <= 100; ++i, ++counter3, ++counter5)
_> {
_> if (counter3 == 3)
_> { ну ладно с новой строки, но зачем скобочек-то поналеплено? знаете, что такое составной оператор? нет? :) а зачем тогда используете?
_> counter3 = 0;
_> }
_> if (counter5 == 5) кстати, такая запись counter5 == 5 редко, но приводит к опечатке counter5 = 5 что тяжело найти,
особенно без тестов, которые, я так понимаю, не для вас и рекомундуется писать обратно 5 == counter5
_> {
_> counter5 = 0;
_> }
_> if (counter3 == 0 && counter5 == 0)
_> {
_> std::cout << "mod15" << std::endl; вообще обычно используют using namespace std, ну я думаю, вы в курсе
_> }
_>
Здравствуйте, __kot2, Вы писали:
__>ну ладно с новой строки, но зачем скобочек-то поналеплено? знаете, что такое составной оператор?
Знаю.
__>нет? а зачем тогда используете?
Потому что так код удобней читать.
Если что, я поначалу (курсе на 2-3) тоже писал в стиле "письмо домой родителям" — много инструкций в 1 строчку.
__>if (counter5 == 5) кстати, такая запись counter5 == 5 редко, но приводит к опечатке counter5 = 5 что тяжело найти, __>особенно без тестов, которые, я так понимаю, не для вас и рекомундуется писать обратно 5 == counter5
Можно я на ты буду?
Все современные компиляторы при присваивании в условии выдают варнинги.
Из выше написанной тобой фразы можно сделать вывод, что ты либо последний раз писал код давно, либо пользуешься древними компиляторами, либо глушишь все варнинги, либо оставляешь после себя простыню варнингов и их даже не читаешь.
Например, на большинстве работ, где я работал, в стайл-гайде запрещалось писать код с варнингами, а в теперешней и еще одной фирме даже более того — большинство проектов собирались с -Werror. Тут даже если и захочешь, в условии не получится присвоить. Так что (5 == counter5) это прошлый век.
__>std::cout << "mod15" << std::endl; вообще обычно используют using namespace std, ну я думаю, вы в курсе
Да, в курсе. Дело вкуса. Кто-то использует, кто-то явно пишет.
Когда в проекте несколько библиотек и у каждой есть похожие сущности, удобней явно писать, что откуда.
__>особенно без тестов, которые, я так понимаю, не для вас
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, RussianFellow, Вы писали:
RF>>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию?
S>Строку перевернуть за О(1) памяти.
это очень легкая задача, такие редко задают.
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, RussianFellow, Вы писали:
RF>>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию?
S>Строку перевернуть за О(1) памяти.
Я не знаю, что такое O(1), O(n), O(log n), но перевернуть строку (тип char* или char[]) без использования STL:
char *s; // или char s[80];int i, n;
char c;
n = strlen(s);
for (i=0; i<n/2; i++)
{
c = s[i];
s[i] = s[n-1-i];
s[n-1-i] = c;
}
1613 г. = 2024 г.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
S>>Строку перевернуть за О(1) памяти.
RF>Я не знаю, что такое O(1), O(n), O(log n), но перевернуть строку (тип char* или char[]) без использования STL:
Это очень плохо. Это должно от зубов отскакивать, т.е. что значит O(1), O(n) и т.д. должно от зубов отскакивать. Можно не знать выч. сложность какого-нибудь алгоритма -- по расходуемой памяти или кол-ву операций, но определение знать необходимо. Мат. часть тут
RF>
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, RussianFellow, Вы писали:
S>>>Строку перевернуть за О(1) памяти.
RF>>Я не знаю, что такое O(1), O(n), O(log n), но перевернуть строку (тип char* или char[]) без использования STL:
S>Это очень плохо. Это должно от зубов отскакивать, т.е. что значит O(1), O(n) и т.д. должно от зубов отскакивать. Можно не знать выч. сложность какого-нибудь алгоритма -- по расходуемой памяти или кол-ву операций, но определение знать необходимо. Мат. часть тут
RF>>
Здравствуйте, antonio_banderas, Вы писали: _>Потому что так код удобней читать.
не только я один считаю, что твой код из-за кучи скобочек стал нечитаемым
_>Если что, я поначалу (курсе на 2-3) тоже писал в стиле "письмо домой родителям" — много инструкций в 1 строчку.
я не про это, я про ненужные скобочки
_>Все современные компиляторы при присваивании в условии выдают варнинги. _>Из выше написанной тобой фразы можно сделать вывод, что ты либо последний раз писал код давно, либо пользуешься древними компиляторами, либо глушишь все варнинги, либо оставляешь после себя простыню варнингов и их даже не читаешь. _>Например, на большинстве работ, где я работал, в стайл-гайде запрещалось писать код с варнингами, а в теперешней и еще одной фирме даже более того — большинство проектов собирались с -Werror. Тут даже если и захочешь, в условии не получится присвоить. Так что (5 == counter5) это прошлый век.
аркгументы, конечно, интересные. но вот мой gcc 4.9.3 — полтора года назад зарелизен варнинг не дает.
__>>особенно без тестов, которые, я так понимаю, не для вас _>Почему?
попробуй, напиши тесты к своему коду
Здравствуйте, RussianFellow, Вы писали:
RF>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
Мне в жизни не приходилось передвинуть бит! (с)
Вариации: посчитать биты в числе, возвести 2 в степень N без циклов
На последних интервью надо было:
— Проверить правильно расставлены скобки ({<>}) в строке
— Перевернуть односвязный список
Здравствуйте, __kot2, Вы писали:
_>>Все современные компиляторы при присваивании в условии выдают варнинги. _>>Из выше написанной тобой фразы можно сделать вывод, что ты либо последний раз писал код давно, либо пользуешься древними компиляторами, либо глушишь все варнинги, либо оставляешь после себя простыню варнингов и их даже не читаешь. _>>Например, на большинстве работ, где я работал, в стайл-гайде запрещалось писать код с варнингами, а в теперешней и еще одной фирме даже более того — большинство проектов собирались с -Werror. Тут даже если и захочешь, в условии не получится присвоить. Так что (5 == counter5) это прошлый век. __>аркгументы, конечно, интересные. но вот мой gcc 4.9.3 — полтора года назад зарелизен варнинг не дает.
Нужно флажок -Wall дать, по умолчанию варнинги отключены.
Для гарантированного отсутствия варнингов можно -Werror. ))
__>>>особенно без тестов, которые, я так понимаю, не для вас _>>Почему? __>попробуй, напиши тесты к своему коду
Скорей всего можно тестами подцепиться к std::cout, ну или если нельзя, выход в другой стрим направить, к которому подцепиться тестами. Всё. Дальше читаем output функции и проверяем.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, playnext, Вы писали:
S>>Строку перевернуть за О(1) памяти. P>это очень легкая задача, такие редко задают.
Тогда тебя не затруднит превести работающий код.
Sic luceat lux!
Re[4]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, Kernan, Вы писали:
S>>>Строку перевернуть за О(1) памяти. P>>это очень легкая задача, такие редко задают. K>Тогда тебя не затруднит превести работающий код.
Если в языке строки immutable то никак, тут O(N) без вариантов.
Если mutable то какие проблемы поменять символы k и lenght-k-1 местами в цикле?
WBR, Igor Evgrafov
Re[5]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, GarryIV, Вы писали:
GIV>Здравствуйте, Kernan, Вы писали:
S>>>>Строку перевернуть за О(1) памяти. P>>>это очень легкая задача, такие редко задают. K>>Тогда тебя не затруднит превести работающий код.
GIV>Если в языке строки immutable то никак, тут O(N) без вариантов. GIV>Если mutable то какие проблемы поменять символы k и lenght-k-1 местами в цикле?
Если immutable то например:
const char* reverseString(char* s) {
if (!s || !*s) {
return s;
}
char* first = s;
char* last = s;
for (; *last; ++last) {}
--last;
for (; first < last; ++first, --last) {
char temp = *first;
*first = *last;
*last = temp;
}
return s;
}
Тут пямять Q(1)
Re[6]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, playnext, Вы писали:
P>Здравствуйте, GarryIV, Вы писали:
GIV>>Здравствуйте, Kernan, Вы писали:
S>>>>>Строку перевернуть за О(1) памяти. P>>>>это очень легкая задача, такие редко задают. K>>>Тогда тебя не затруднит превести работающий код.
GIV>>Если в языке строки immutable то никак, тут O(N) без вариантов. GIV>>Если mutable то какие проблемы поменять символы k и lenght-k-1 местами в цикле?
P>Если immutable то например: P>
Здравствуйте, antonio_banderas, Вы писали: _>Нужно флажок -Wall дать, по умолчанию варнинги отключены. _>Для гарантированного отсутствия варнингов можно -Werror. ))
нууу, знаешь, приходить в проект, а потом говорить — а давайте вы мне мои недефолтные опции компилятора подключим, это не дело
_>Скорей всего можно тестами подцепиться к std::cout, ну или если нельзя, выход в другой стрим направить, к которому подцепиться тестами. Всё. Дальше читаем output функции и проверяем.
no hire! следующий
Re: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, RussianFellow, Вы писали:
RF>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
Вот например, весьма примитивная задача. Решается за 5 максимум 10 минут.
Есть стек элементов произвольного типа (тип можно выбрать самому).
Необходимо отсортировать элементы в первом стеке используя еще один такой же стек (изначально он тоже может быть непустой).
Само собой нельзя использовать другие коллекции кроме этого дополнительного стека.
Re[10]: Типовые задачи на собеседованиях по программированию
Здравствуйте, antonio_banderas, Вы писали:
_>Скорей всего можно тестами подцепиться к std::cout, ну или если нельзя, выход в другой стрим направить, к которому подцепиться тестами. Всё. Дальше читаем output функции и проверяем.
А почему же не сделать сохранение результатов в коллекции — например в коллекции типа std::vector<string>
и в юнит-тесте уже данную коллекцию с выходными результатами крутить?
Здравствуйте, licedey, Вы писали:
L>Здравствуйте, RussianFellow, Вы писали:
RF>>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию? RF>>Желательно привести решения этих задач с комментариями или объяснениями. (Стандартный язык для ответов--C++, но можно использовать любой другой--Delphi, C#, Java и т.д.)
L>Мне в жизни не приходилось передвинуть бит! (с) L>Вариации: посчитать биты в числе, возвести 2 в степень N без циклов
типа этого _mm_popcnt_u32?
ЗЫ: на плюсах не пишу
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, Философ, Вы писали:
Ф>Здравствуйте, licedey, Вы писали:
L>>Мне в жизни не приходилось передвинуть бит! (с) L>>Вариации: посчитать биты в числе, возвести 2 в степень N без циклов
Ф>типа этого _mm_popcnt_u32? Ф>ЗЫ: на плюсах не пишу
Простите, вы о чем вообще? Погуглил и то не понял.
Re[4]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, licedey, Вы писали:
L>Здравствуйте, Философ, Вы писали:
Ф>>типа этого _mm_popcnt_u32? Ф>>ЗЫ: на плюсах не пишу
L>Простите, вы о чем вообще? Погуглил и то не понял.
А, понял. Только на собеседованиях это надо ручками на листочке сделать в цикле for.
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, AlexGin, Вы писали:
AG>А почему же не сделать сохранение результатов в коллекции — например в коллекции типа std::vector<string> AG>и в юнит-тесте уже данную коллекцию с выходными результатами крутить?
Потому что код должен быть един — для основной задачи и для тестов.
А у тебя для основной задачи один код (printf), а для тестов другой код (vectOutStrings.push_back).
Чем это плохо? Тем, что по факту тесты не проверяют основной код. Они проверяют код для тестов.
AG>Как вариант — это сохранение в вектор подключать через опцию препроцессора.
Такие ветвления очень усложняют чтение и дальнейшую поддержку. И проблема с двумя разными кодами остается.
Два минуса и ни одного плюса.
Решение — возвращать строку, и потом её выводить на консоль. А тесты эту строку будут просто разбирать и проверять.
std::string composeTask()
{
// здесь мы всё накидываем в строку.
}
void printTask()
{
std::cout << composeTask() << std::endl;
}
SOME_TEST_MACRO()
{
std::string result = composeTask();
// а здесь разбираем и оцениваем result.
}
Re[12]: Типовые задачи на собеседованиях по программированию
Здравствуйте, antonio_banderas, Вы писали: _>Решение — возвращать строку, и потом её выводить на консоль. А тесты эту строку будут просто разбирать и проверять.
ладно, не буду больше таить интригу — тест не может тестировать результат цикла целиком
Re[13]: Типовые задачи на собеседованиях по программированию
Здравствуйте, __kot2, Вы писали:
_>>Решение — возвращать строку, и потом её выводить на консоль. А тесты эту строку будут просто разбирать и проверять. __>ладно, не буду больше таить интригу — тест не может тестировать результат цикла целиком
Почему?
Re[14]: Типовые задачи на собеседованиях по программированию
Здравствуйте, antonio_banderas, Вы писали: _>Почему?
один тест тестирует одну вещь. а тут вычисление сразу ряда происходит.
если сказать "а ну и фиг с ним" и продолжить писать тесты в таком стиле, то это сделает тесты огромными и невменяемыми (парсинг аутпута — ну что может быть лучше? ). и вылазаит та проблема, на которую так любят жаловаться люди которые тысте не пишут — что писать их прихолится даже больше, чем кода
Re[15]: Типовые задачи на собеседованиях по программированию
Здравствуйте, __kot2, Вы писали:
_>>Почему? __>один тест тестирует одну вещь. а тут вычисление сразу ряда происходит.
__>если сказать "а ну и фиг с ним" и продолжить писать тесты в таком стиле, то это сделает тесты огромными и невменяемыми (парсинг аутпута — ну что может быть лучше? ). и вылазаит та проблема, на которую так любят жаловаться люди которые тысте не пишут — что писать их прихолится даже больше, чем кода
Ок, парсинг аутпута это плохо.
А так, интуитивно — тестировать надо минимальную логическую единицу (функцию, блок, модуль) — цельную. Для тестов код — это черный ящик, они не должны знать, как он устроен внутри, и тем более полагаться на это.
С исходным примером это как посчитать — может минимальной логической единицей быть как решение задачи целиком, так и построчно (каждая строка не зависит от остальных).
Мне больше нравится решение целиком, типа, здесь строки независимы, а где-то могут быть и зависимы. Возможно, дело вкуса.
Да и в чем проблема финальную строку разбить в тестах на массив строк.
Re: Типовые задачи на собеседованиях по программированию с решениями
Развернуть на месте UTF8–строку, с варьируемой байтовой шириной символов. Запрещены промежуточные преобразования, сторонние библиотеки, аллокации памяти.
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, nekocoder, Вы писали:
N>Здравствуйте, RussianFellow, Вы писали:
RF>>Коллеги, не могли бы вы подсказать, какие бывают типовые задачи на собеседованиях по программированию?
N>Есть посвященная как раз этому книга Cracking the Coding Interview.
Я бы сказал что это первый шаг, т.к. набить руку можно только пытаясь решить эти задачи. Для практики есть всякие leetcode и interviewbit
Re[2]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, serj.e, Вы писали:
SE>Развернуть на месте UTF8–строку, с варьируемой байтовой шириной символов. Запрещены промежуточные преобразования, сторонние библиотеки, аллокации памяти.
wchar *s; // эта строкаwchar c1, c2;
int n;
n = wstrlen(s);
for (i=0; i<n/2; i++)
{
c1 = s[i];
c2 = s[n-i-1];
s[i] = c2;
s[n-i-1] = c1;
}
Так что-ли?
1613 г. = 2024 г.
Re[3]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, RussianFellow, Вы писали:
RF>Здравствуйте, serj.e, Вы писали:
SE>>Развернуть на месте UTF8–строку, с варьируемой байтовой шириной символов. Запрещены промежуточные преобразования, сторонние библиотеки, аллокации памяти.
RF>
Здравствуйте, RussianFellow, Вы писали:
RF>Здравствуйте, AleksandrN, Вы писали:
AN>>А с чего ты взял, что это код для переворота UTF-8?
RF>Ну так для UTF-8 используется тип wchar, не так ли?
Для utf-8 — char. Но для кодировки каждого байта используется от 1 до 6 байт. В этом и сложность переворота такой строки.
Здравствуйте, AleksandrN, Вы писали:
RF>>Ну так для UTF-8 используется тип wchar, не так ли?
AN>Для utf-8 — char. Но для кодировки каждого байта используется от 1 до 6 байт. В этом и сложность переворота такой строки.
Ну и как такая строка переворачивается?
1613 г. = 2024 г.
Re[7]: Типовые задачи на собеседованиях по программированию с решениями
Здравствуйте, RussianFellow, Вы писали:
RF>Здравствуйте, AleksandrN, Вы писали:
RF>>>Ну так для UTF-8 используется тип wchar, не так ли?
AN>>Для utf-8 — char. Но для кодировки каждого байта используется от 1 до 6 байт. В этом и сложность переворота такой строки.
RF>Ну и как такая строка переворачивается?
Вариант 1:
Конвертировать в UTF-16, перевернуть, конвертировать обратно.
Вариант 2:
Без конвертации в кодировку с фиксированной шириной символа. Это тебе домашнее задание. Когда сделаешь — выложи код.
Проверь свою функцию на строке:
Как успехи? おそらく、それはあなたのために難しいことではありませんでしたか?
Re[8]: Типовые задачи на собеседованиях по программированию с решениями