Форум программистов, компьютерный форум CyberForum.ru

Тестовое задание на Junior C++ dev - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 94, средняя оценка - 4.88
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 18:40     Тестовое задание на Junior C++ dev #1
Доброго времени суток.
Неделю назад ради интереса отправил свое резюме в одну компанию, куда требуются с++ юниоры. Получил от них тестовое задание. Я ожидал, что они мне откажут (опыта то у меня действительно мизер), но хотелось бы узнать у более опытных людей, какое решение задач "ожидает" компания от соискателя для продолжения с ним отношений.
Далее идет 4 задачи и мой вариант решения каждой из них.

1. Распечатать произвольное число в двоичной системе исчисления.

Описание.
Написать функцию, принимающую на вход произвольное целочисленное значение и возвращающую строку, содержащую его представление в двоичной системе исчисления.

Декларация.
voidNumberAsBinary(
char* _result,// строка с результатом
unsignedint _number// произвольное число
)

Ожидаемый результат.
Например, для числа 13 данная функция должна вернуть строку "1101".

Проверка работы.
Решение должно демонстрировать работу функции на примере 10 случайных чисел в диапазоне 0 до 512.
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
39
40
41
42
#include <iostream>
#include <stdlib.h>
#include <time.h>
using std::cout;
using std::endl;
 
void numberAsBinary(char *_result, unsigned int _number); 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char *result = new char[11];
    unsigned int number;
    
    srand((unsigned)time(NULL));
    for (int i = 1; i <= 10; i++)
    {
        number = rand() % 513;
        numberAsBinary(result, number);
        cout << "Число " << number << " в двоичной системе счисления равно " << result << endl;
    }
 
    delete [] result;
    system("pause");
    return 0;
}
 
void numberAsBinary(
char *_result,
unsigned int _number
    )
{
    static int i;
    i = 0;
 
    if (_number != 1)
        numberAsBinary(_result, _number / 2);
 
    _result[i] = (_number % 2) + '0';
    i++;
    _result[i] = '\0';
}

2. Сгенерировать неупорядоченный массив целых чисел от 1 до N.

Описание.
Написать функцию, принимающую на вход произвольное целочисленное значение и возвращающую массив, содержащий последовательность чисел от 1 до этого значения, в котором каждое число последовательности находится в заведомо случайной позиции.

Декларация.
void GenerateRandomArray(
int * _result, // возвращаемыймассив
unsignedint _maxValue// максимальное число в последовательности
)

Ожидаемый результат.
Например, 2 последовательных запуска данной функции с параметром 7 могут сгенерировать последовательности вида
{2, 5, 7, 3, 4, 1, 6}
{5, 1, 3, 4, 6, 2, 7}

Проверка работы.
Решение должно демонстрировать работу функции на примере 4 случайных чисел в диапазоне от 5 до 15.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
using std::cout;
using std::endl;
 
void generateRandomArray(int *_result, unsigned int _maxValue);
 
int main()
{
    setlocale(LC_ALL, "Russian");
    unsigned int maxValue;
    
    srand((unsigned)time(NULL));
    for (int i = 1; i <= 4; i++)
    {
        maxValue = 5 + rand() % 11;
        int *result = new int[maxValue];
        generateRandomArray(result, maxValue);
    
        cout << "Неупорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ": ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
        cout << endl;
        delete [] result;
    }
 
    system("pause");
    return 0;
}
 
void generateRandomArray(
int *_result, 
unsigned int _maxValue
    )
{
    int ind1, ind2, tmp;
 
    for (unsigned int i = 0, j = 1; i < _maxValue; i++, j++)
        _result[i] = j;
 
    for (int i = 1; i <= 20; i++)
    {
        ind1 = rand() % _maxValue;
        ind2 = rand() % _maxValue;
        tmp = _result[ind1];
        _result[ind1] = _result[ind2];
        _result[ind2] = tmp;
    }
}

3. Сортировка массива.

Описание.
Написать функцию, принимающую в качестве параметра массив неупорядоченных целых чисел (сгенерированный с помощью функции из задачи 2) и выполняющую его сортировку.

Декларация.
voidSort(
int* _values,// сортируемый массив
unsignedint _count// количество элементов в массиве
)

Ожидаемый результат.
Например, массив вида {2, 5, 7, 3, 4, 1, 6} будет преобразован данной функцией в {1, 2, 3, 4, 5, 6, 7}.

Проверка работы.
Решение должно демонстрировать работу функции на примере результатов, полученных при решении задачи 2 (последовательностей, сгенерированных для 4 случайных чисел в диапазоне от 5 до 15).
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
using std::cout;
using std::endl;
 
void generateRandomArray(int *_result, unsigned int _maxValue);
void Sort(int *_values, unsigned int _count);
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    unsigned int maxValue;
    
    srand((unsigned)time(NULL));
    for (int i = 1; i <= 4; i++)
    {
        maxValue = 5 + rand() % 11;
        int *result = new int[maxValue];
        generateRandomArray(result, maxValue);
    
        cout << "Неупорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ": ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
        cout << endl;
 
        Sort(result, maxValue - 1);
 
        cout << "Упорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ":   ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
        cout << endl << endl;
 
        delete [] result;
    }
 
    system("pause");
    return 0;
}
 
void generateRandomArray(
int *_result, 
unsigned int _maxValue
    )
{
    int ind1, ind2, tmp;
 
    for (unsigned int i = 0, j = 1; i < _maxValue; i++, j++)
        _result[i] = j;
 
    for (int i = 1; i <= 20; i++)
    {
        ind1 = rand() % _maxValue;
        ind2 = rand() % _maxValue;
        tmp = _result[ind1];
        _result[ind1] = _result[ind2];
        _result[ind2] = tmp;
    }
}
 
void Sort(
int *_values,
unsigned int _count
    )
{
    int i = 0, j = _count; 
    int temp, p;
 
    p = _values[_count >> 1]; 
 
    do
    {
        while (_values[i] < p) i++;
        while (_values[j] > p) j--;
 
        if (i <= j) 
        {
            temp = _values[i];
            _values[i] = _values[j];
            _values[j] = temp;
            i++;
            j--;
        }
 
    } while (i <= j);
 
    if (j > 0) 
        Sort(_values, j);
    if (_count > (unsigned)i)  
        Sort(_values+i, _count-i);
}
4. Определить недостающее число в неупорядоченной последовательности целых чисел.

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

Декларация.
intGetMissingValue(
constint * _values,// неупорядоченный массив целых чисел от 1 до _count
unsignedint _count// количество элементов в массиве
)

Ожидаемый результат.
Например, для последовательности {5, 7, 8,3, 1, 9, 2, 6, 4} данная функция должна вернуть 4.

Проверка работы.
Решение должно демонстрировать работу функций на примере результатов, полученных при решении задачи 2 (последовательностей, сгенерированных для 4 случайных чисел в диапазоне от 5 до 15).
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <iomanip>
using std::cout;
using std::endl;
 
void generateRandomArray(int *_result, unsigned int _maxValue);
void Sort(int *_values, unsigned int _count);
int getMissingValue(const int *_values, unsigned int _count);
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    unsigned int maxValue;
    
    srand((unsigned)time(NULL));
    for (int i = 1; i <= 4; i++)
    {
        maxValue = 5 + rand() % 11;
        int *result = new int[maxValue];
        generateRandomArray(result, maxValue);
    
        cout << "Неупорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ": ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
 
        cout << endl << "Значение последнего элемента:     " 
             << getMissingValue(result, maxValue) << endl;
 
        Sort(result, maxValue - 1);
 
        cout << "Упорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ":   ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
        cout << endl << endl;
 
        delete [] result;
    }
 
    system("pause");
    return 0;
}
 
void generateRandomArray(
int *_result, 
unsigned int _maxValue
    )
{
    int ind1, ind2, tmp;
 
    for (unsigned int i = 0, j = 1; i < _maxValue; i++, j++)
        _result[i] = j;
 
    for (int i = 1; i <= 20; i++)
    {
        ind1 = rand() % _maxValue;
        ind2 = rand() % _maxValue;
        tmp = _result[ind1];
        _result[ind1] = _result[ind2];
        _result[ind2] = tmp;
    }
}
 
void Sort(
int *_values,
unsigned int _count
    )
{
    int i = 0, j = _count; 
    int temp, p;
 
    p = _values[_count >> 1]; 
 
    do
    {
        while (_values[i] < p) i++;
        while (_values[j] > p) j--;
 
        if (i <= j) 
        {
            temp = _values[i];
            _values[i] = _values[j];
            _values[j] = temp;
            i++;
            j--;
        }
 
    } while (i <= j);
 
    if (j > 0) 
        Sort(_values, j);
    if (_count > (unsigned)i)  
        Sort(_values+i, _count-i);
}
 
int getMissingValue(
const int *_values,
unsigned int _count
    )
{
    unsigned int checkSum = 0, sum = 0;
 
    for (unsigned int i = 0; i < _count - 1; i++)
    {
        checkSum += i + 1;
        sum += _values[i];
    }
 
    return checkSum + _count - sum;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2013, 18:40     Тестовое задание на Junior C++ dev
Посмотрите здесь:

Задание на массив и задание на матрицу. C++
C++ Dev C++
Небольшое тестовое задание в финской компании. C++
C++ Публичные проекты. Junior C++
ООП. Тестовое задание собеседования. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.07.2013, 20:25     Тестовое задание на Junior C++ dev #21
Мимино, можем пройтись по битам целого числа и не начинать запись в строку до тех пор, пока не встретим первую единицу.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 20:29  [ТС]     Тестовое задание на Junior C++ dev #22
Цитата Сообщение от 0x10 Посмотреть сообщение
Мимино, можем пройтись по битам целого числа и не начинать запись в строку до тех пор, пока не встретим первую единицу.
Вариант, но почему в данном моменте рекурсия хуже?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.07.2013, 20:33     Тестовое задание на Junior C++ dev #23
C++
1
2
3
4
void NumberAsBinary(
char* _result,// строка с результатом
unsigned int _number// произвольное число
)
Серьезно, не стоит даже пытаться писать резюме в эту компанию. Параметры функции, начинающиеся с подчеркивания - это коротко говоря очень грустно. Все сказанное чистое ИМХО разумеется.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.07.2013, 20:34     Тестовое задание на Junior C++ dev #24
Кастую в тред кого-нибудь умного, кто скажет, что рекурсия всегда хуже, когда возможна итерация)

Добавлено через 47 секунд

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Параметры функции, начинающиеся с подчеркивания - это коротко говоря очень грустно
Оставим на совести компании...

Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 20:34  [ТС]     Тестовое задание на Junior C++ dev #25
Цитата Сообщение от 0x10 Посмотреть сообщение
Ага, почти.
Алгоритм перемешивания массива много раз на форуме расписывали.
Нашел тему Перемешивание массива. Чем плох мой вариант? Я не использовал STL? Да, это большой минус, но... в требованиях к кандидату говорится, что знание STL это только дополнительное преимущество, а не требование.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.07.2013, 20:34     Тестовое задание на Junior C++ dev #26
0x10, Зависит от требований эффективности, логичности все же. qsort например итеративно писать несколько сложнее, чем рекурсивно. Или обход дерева.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 20:45  [ТС]     Тестовое задание на Junior C++ dev #27
И все же, как по вашему, в чем же у меня такой минус, что даже на собеседование не позвали? Сильно заметно по коду, что я зеленый-зеленый? Или есть какие то недопустимые ошибки в решении задач?
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.07.2013, 21:12     Тестовое задание на Junior C++ dev #28
Цитата Сообщение от ForEveR Посмотреть сообщение
Зависит от требований эффективности, логичности все же.
Да. Но в общем случае, полагаю, о рекурсии стоит задумываться в последнюю очередь.

Цитата Сообщение от Мимино Посмотреть сообщение
Вариант, но почему в данном моменте рекурсия хуже?
Хотя бы тем, что тут она не нужна) слишком жирно тратиться на вызов функции для такой простой задачи. Плюс, битовые операции в помощь.
Сейчас просто набросал эту функцию - получилось 23 строки, из которых 12 - фигурные скобки и пустые строки. Не думаю, что это слишком громоздко.

Цитата Сообщение от Мимино Посмотреть сообщение
Чем плох мой вариант? Я не использовал STL? Да, это большой минус, но...
Не в stl дело, а в самом алгоритме)
Я допускаю, что возможно несколько реализаций, но лично мне ближе рассматривать такую функцию как предельный случай выборки без повторений, когда размер выборки равен размеру массива.
Ну и два рандома для одной операции - это в принципе не очень хорошо, поскольку числа все-таки он генерирует псевдослучайные.

Добавлено через 7 минут
Мимино, про перемешивание... Это, конечно, крайний и не особо возможный случай, но представьте, что генератор тупит и всегда выдает константу. Тогда по завершению цикла массив вообще не перемешается.

Добавлено через 7 минут
Хотя с последним уже меня заносит - такие случаи вообще не имеет смысла рассматривать.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 21:14  [ТС]     Тестовое задание на Junior C++ dev #29
Цитата Сообщение от 0x10 Посмотреть сообщение
Хотя бы тем, что тут она не нужна) слишком жирно тратиться на вызов функции для такой простой задачи.
Но требований то никаких не ставилось Вот в других компаниях требования четко стоят: сделать рекурсивно или сделать итеративно... или просят реализовать алгоритм определенной сложности... А тут делай как хочешь, а мы потом посмотрим Вот поэтому у меня и возник вопрос: посмотрев на это действительно можно понять, что я не гожусь даже в подмастерье? И если да, то по каким критериям. Критерии мы обсудили, но вопрос в том, достаточно ли их для принятия решения об отказе? У кого опыт в этом деле есть?
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
26.07.2013, 21:15     Тестовое задание на Junior C++ dev #30
а что стандартную библиотеку нельзя было использовать?
там некоторые задания на 5 строчек кода.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 21:19  [ТС]     Тестовое задание на Junior C++ dev #31
Цитата Сообщение от Хулиган Посмотреть сообщение
там некоторые задания на 5 строчек кода.
прям таки на 5? и условию соответствуют?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.07.2013, 21:20     Тестовое задание на Junior C++ dev #32
В первой задаче от вас ожидали работу с битами памяти с красивым алгоритмом, а может и не одним, во второй это модификация сортировки выбором в один цикл, а вы намудрили, конечно, в четвертой банально вычислить
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{n(n+1)}{2}-a[0]-...-a[n-2]. Да и программы нечетабельны, конечно, тоже, наверное, бросилось в глаза.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 21:22  [ТС]     Тестовое задание на Junior C++ dev #33
Цитата Сообщение от Thinker Посмотреть сообщение
Да и программы нечетабельны, конечно, тоже, наверное, бросилось в глаза.
Почему нечитабельны?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.07.2013, 21:25     Тестовое задание на Junior C++ dev #34
Цитата Сообщение от Мимино Посмотреть сообщение
Почему нечитабельны?
код плохо отформатирован, например
C++
1
2
3
void numberAsBinary(
char *_result,
unsigned int _number
ну что это такое, да и черточки зачем эти
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 21:26  [ТС]     Тестовое задание на Junior C++ dev #35
Цитата Сообщение от Thinker Посмотреть сообщение
код плохо отформатирован, например
C++
1
2
3
void numberAsBinary(
char *_result,
unsigned int _number
ну что это такое, да и черточки зачем эти, вы же классы не создаете.
Это требования работодателя, надо вот так оформить функции. Я от этого сам не в восторге
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.07.2013, 21:27     Тестовое задание на Junior C++ dev #36
Цитата Сообщение от Мимино Посмотреть сообщение
Это требования работодателя, надо вот так оформить функции. Я от этого сам не в восторге

Не по теме:

а, ну тогда это их порядки, значит алгоритмы им не понравились

0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.07.2013, 21:28     Тестовое задание на Junior C++ dev #37
Цитата Сообщение от Мимино Посмотреть сообщение
Это требования работодателя
Мало ли как у них форматирование в письме ползет) Да и за подчеркивания уже был тут им выговор)
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 21:35  [ТС]     Тестовое задание на Junior C++ dev #38
Цитата Сообщение от Thinker Посмотреть сообщение
Не по теме:
...значит алгоритмы им не понравились
Я вот поэтому и хочу устроиться куда нить в подмастерье, чтобы руку набить. Самостоятельное изучение и решение тонн задач не заменит живую практику.

Всем спасибо, ошибки учел, буду работать над собой
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.07.2013, 21:50     Тестовое задание на Junior C++ dev #39
на что я смотрю:
сперва поверхностно. тут на первом плане форматирование кода. в целом аккуратненько. но
int ind1, ind2, tmp; переменные желательно юзать поближе к месту, где они понадобились. и инициализировать.
не экономте на строчках. глазу сложнее выцепить из кода место появления переменной, если они вот так в куче.
while (_values[i] < p) i++; - то же самое. условие цикла и тело в одной строке. неудобно читать, неудобно дебажить.
далее увидел new int *result = new int[maxValue]; тут имеем возможность получить утечку. всегда используйте RAII.
отсутствует проверка входных данных. есть потенциальные обращения по нулевому укзателю, и деление на ноль.
не использование STL считаю минусом.

C++
1
2
3
4
      cout << "Неупорядоченные числа от 1 до " 
             << std::setw(2) << maxValue << ": ";
        for (unsigned int i = 0; i < maxValue; i++)
            cout << result[i] << ' ';
и чуть ниже похожий кусок. - копипаста. можно было оформить в отдельную функцию.

Задания дурацкие, мало что по ним можно понять о кандидате. отказать могли по разным причинам, не обязательно из-за кода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2013, 22:11     Тестовое задание на Junior C++ dev
Еще ссылки по теме:

C++ Определение уровня Junior C++ developer?
C++ Тестовое задание для трудоустройства
C++ dev-c++

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

Или воспользуйтесь поиском по форуму:
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
26.07.2013, 22:11     Тестовое задание на Junior C++ dev #40
1, 2 и 4 в кратце решил бы так:
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
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <vector>
#include <string>
#include <chrono>
#include <random>
#include <algorithm>
#include <functional>
#include <numeric>
#include <cstdint>
 
std::string to_binary(uint64_t x)
{
    std::string str;
    uint64_t mask = 1ull << 64 - 1;
    do {
        str.push_back( (x & mask ? '1' : '0') );
    } while ( mask >>= 1 );
    return str;
}
 
template <class T>
std::vector<T> generateUnique(T highest)
{
    static_assert(std::is_arithmetic<T>::value, "T must be arithmetic");
    std::vector<T> v(highest);
    std::iota(begin(v), end(v), T(1));
    std::shuffle(begin(v), end(v),
        std::mt19937(std::chrono::system_clock::now().time_since_epoch().count()));
    return v;
}
 
template <class T>
T getMissingValue(const std::vector<T> &v)
{
    static_assert(std::is_arithmetic<T>::value, "T must be arithmetic");
    return (1 + v.size()) * v.size() / 2 -
        std::accumulate(begin(v), end(v) - 1, T(0), std::plus<T>());
}
 
int main()
{
    std::cout << to_binary(255) << std::endl;
    auto v = generateUnique<int>(20);
    for (auto x : v)
        std::cout << x << ", ";
    std::endl(std::cout);
    v = {5, 7, 8, 3, 1, 9, 2, 6, 4};
    std::cout << getMissingValue(v);
    return 0;
}
Yandex
Объявления
26.07.2013, 22:11     Тестовое задание на Junior C++ dev
Ответ Создать тему
Опции темы

Текущее время: 12:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru