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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 94, средняя оценка - 4.88
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
#1

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

26.07.2013, 18:40. Просмотров 13280. Ответов 60
Метки нет (Все метки)

Доброго времени суток.
Неделю назад ради интереса отправил свое резюме в одну компанию, куда требуются с++ юниоры. Получил от них тестовое задание. Я ожидал, что они мне откажут (опыта то у меня действительно мизер), но хотелось бы узнать у более опытных людей, какое решение задач "ожидает" компания от соискателя для продолжения с ним отношений.
Далее идет 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++
private class Connect (){ public Device dev1 = new Device(); public Device dev2 = new Device(); puclic void Connect (){ for...

ООП. Тестовое задание собеседования. - C++
Это тестовое задание для устройста на работу. Я не совсем понимаю что от меня хотят. Не могли бы вы мне далее составить набросок плана...

Тестовое задание для трудоустройства - C++
Решил попробовать устроиться в компанию и узнать что вообще и как. Отправил в компанию резюме, дали тестовое задание: Страуструп. Глава...

Небольшое тестовое задание в финской компании. - C++
Привествую всех жителей форума. Сразу отмечу, что решения просить не хочу, а просто хочу показать задание, которая давала компания...

Написать ответы на тестовое задание при приёме на работу (исключения, sizeof, mutex) - C++
Добрый день! Ходил недавно на собеседование. Имеется список вопросов, на некоторые ответил правильно на какие-то - нет. Хотелось бы...

Тестовое задание от работадателя. Хотелось бы услышать критику. - C++
Пробую устроиться программистом. Вот одна из компаний выслала мне тестовое задание следующего содержания: Немного поломав голову,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
26.07.2013, 18:55 #2
В 4 задаче схитри. Просто посчитай сумму чисел с помощью формулы суммы арифметической прогрессии.
S = ( 2*a1 + (n - 1)*d ) / 2 * n.
где a1 — первый член прогрессии, d — разность прогрессии, n — количество суммируемых членов.
В твоём случае a1 = 1, d = 1, n = _count + 1;
Теперь посчитай сумму элементов в данном массиве. Вычти эту сумму из суммы прогрессии.
Разность будет недостающим числом.
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 18:58  [ТС] #3
Цитата Сообщение от SummerRain Посмотреть сообщение
В 4 задаче схитри. Просто посчитай сумму чисел с помощью формулы суммы арифметической прогрессии.
S = ( 2*a1 + (n - 1)*d ) / 2 * n.
где a1 — первый член прогрессии, d — разность прогрессии, n — количество суммируемых членов.
В твоём случае a1 = 1, d = 1, n = _count + 1;
Теперь посчитай сумму элементов в данном массиве. Вычти эту сумму из суммы прогрессии.
Разность будет недостающим числом.
Спасибо, но разве это может повлиять на принятие решения относительно соискателя?
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
26.07.2013, 19:01 #4
Покажет, что ты умеешь мыслить нестандартно. Находить скрытые более легкие пути.
Это выделит тебя из толпы людей, которые решат её правильно, но обычным путём.
На собеседовании важно не только правильно решить задачу, но и показать свою смекалку и находчивость.
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 19:08  [ТС] #5
Цитата Сообщение от SummerRain Посмотреть сообщение
Покажет, что ты умеешь мыслить нестандартно. Находить скрытые более легкие пути.
Это выделит тебя из толпы людей, которые решат её правильно, но обычным путём.
На собеседовании важно не только правильно решить задачу, но и показать свою смекалку и находчивость.
Ну так решение и построено почти по этому же принципу. Сумма всех элементов последовательности минус сумма элементов массива без последнего элемента. Только подсчет суммы последовательности ведется в том же цикле, что и сумма элементов массива.
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
26.07.2013, 19:09 #6
а сортировка зачем?
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 19:37  [ТС] #7
Цитата Сообщение от SummerRain Посмотреть сообщение
а сортировка зачем?
да, там я тупанул немного. нужно было на примере 2-го задания проверить. а я проверил на примере 3-го.

Добавлено через 27 минут
Вариантов больше нет, все идеально?
Вот еще есть правила решения
Правила решения.

Результат решения задач должен представлять из себя компилирующийся и запускающийся проект для MicrosoftVisualStudio (C++), содержащий исходные файлы с решением для каждой задачи.

Решением каждой задачи является функция, написанная на языке С либо С++ и соответствующая всем указанным в задаче требованиям, а также код, позволяющий оценить результаты ее выполнения.
Например, если указано, что решение должно демонстрировать работу функции на примере 10 случайных чисел в диапазоне 0 до 512, тест-код должен генерировать 10 случайных чисел в указанном диапазоне и запускать функцию, передавая каждое из них в качестве параметра.

При решении задач допускается использование произвольных функцийC standard libraryи произвольных контейнеровStandard C++ library, за исключением функций, полностью решающих поставленную задачу - например, при решении задачи о сортировке массива недопустимо использование функции qsort.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
26.07.2013, 19:53 #8
Автор уже отправил свои варианты или ждет пока ему напишут другие решения тут?
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 19:54  [ТС] #9
Цитата Сообщение от 0x10 Посмотреть сообщение
Автор уже отправил свои варианты или ждет пока ему напишут другие решения тут?
Я уже отправил эти решения и получил ожидаемый отказ. Вот теперь интересно узнать, как должно выглядеть приближенное к идеалу решения этих задач.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
26.07.2013, 19:58 #10
Сразу вопрос по первой задаче: с какой целью была использована рекурсия?
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 20:01  [ТС] #11
Цитата Сообщение от 0x10 Посмотреть сообщение
Сразу вопрос по первой задаче: с какой целью была использована рекурсия?
Сначала я решил это задание простым циклом. Во временную строку записывал остатки от деления, а потом эту строку переписал в обратном порядке в _result. Получилось громоздко. Рекурсия позволяет сразу записывать результат в строку в правильном порядке.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
26.07.2013, 20:05 #12
4.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
    int arr[4] {1, 2, 3, 9991};
    int x = 0;
    for(int i = 0; i < 4; ++i)
        x = x ^ arr[i] ^ (i + 1);
    std::cout << (x ^ 4);
    return 0;
}


нет. что-то я погорячился)
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
26.07.2013, 20:13 #13
Мимино, думаю, стоит все-таки реализовать итеративное решение, с возможностью пропуска начальных нулей, раз того требует постановка задачи.

Olivеr, если бы и нет - к подобным функциям было бы неплохо еще прикладывать портянку комментариев с пояснениями)

Добавлено через 3 минуты
Мимино, по второй задаче стоит, пожалуй, задуматься над вопросами:
1) а нужны ли там два счетчика в первом цикле, где происходит заполнение массива?
2) а можно ли в цикле со случайными перестановками обойтись одним вызовом rand()?
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
26.07.2013, 20:14  [ТС] #14
Цитата Сообщение от 0x10 Посмотреть сообщение
с возможностью пропуска начальных нулей, раз того требует постановка задачи.
в смысле? тут не понял.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
26.07.2013, 20:15 #15
Цитата Сообщение от Мимино Посмотреть сообщение
в смысле? тут не понял
Ну в смысле, что требуют, чтобы 13 выводилось как 1101, а не как 00001101.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2013, 20:15
Привет! Вот еще темы с ответами:

Тестовое задание к собеседованию Junior ASP.NET MVC - C# MVC
Всем привет! Буду рад любой помощи и совету. Ситуация такая: компания дала тестовое задние перед собеседование на Junior ASP.NET MVC...

Тестовое задание - Java
Возникла необходимость сделать вот такое задание. Create a configurable two-level cache (for caching Objects). Level 1 is memory,...

Тестовое задание - PHP
Ребят, подскажите пожалуйста, кто с опытом, есть компания, хорошие условия работы и т.п. Я сразу понимаю что не волоку, но хочу подтянуть...

тестовое задание - Java SE
Здравствуйте! тестовое задание : Задача создать GUI приложение для конвертации файлов данных разных форматов. Данными в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.07.2013, 20:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru