Продолжаем публиковать интересные задачи и вопросы с собеседований в различные IT-компании мира.
На этот раз в подборку попали вопросы для будущих инженеров-программистов в Symantec. В преддверии майский праздников, задачи выбраны не самые сложные, но требующие некоторого размышления. Просим также писать в комментариях интересные вопросы и задачи, которые встречались Вам на собеседованиях.
Ответы будут даны в течение следующей недели — успейте решить. Удачи!
На этот раз в подборку попали вопросы для будущих инженеров-программистов в Symantec. В преддверии майский праздников, задачи выбраны не самые сложные, но требующие некоторого размышления. Просим также писать в комментариях интересные вопросы и задачи, которые встречались Вам на собеседованиях.
Вопросы
- Counterfeit сoins
A box contains n coins, of which 7 of them are counterfeit with tails on both sides and the rest are fair coins. If one coin is selected from the bag and tossed, the probability of getting a tail is 17/20. Find the value of ‘n’.
ПереводВ коробке n монет, 7 из которых поддельные — с решкой на обеих сторонах, а остальные монеты — правильные. Если выбрать и подбросить монету из коробки — шанс выпадения решки 17/20. Найдите n.
- The largest unavailable number
At McDonald’s you can order Chicken McNuggets in boxes of 6,9, and 20. What is the largest number of nuggets that you cannot order using any combination of the above?
ПереводВ Макдональдс Вы можете заказать куриные наггетсы в коробке на 6, 9 и 20 шт. Каким является максимальное число наггетсов, которое нельзя заказать любыми комбинациями этих коробок,
Прим. Нет, рекламу нам не оплачивали :)
Задачи
- Find all combinations
Given a set of characters and a positive integer k, print all possible strings of length from 1 to k that can be formed from the given set.
Examples:
Input:
set[] = {'a', 'b'}, k = 3
Output:
a
b
aa
ab
ba
bb
aaa
aab
aba
abb
baa
bab
bba
bbb
Input:
set[] = {'a', 'b', 'c', 'd'}, k = 1
Output:
a
b
c
d
ПереводДан набор символов и положительное число k. Выведите все возможные строковые комбинации длиной от 1 до k, которые можно получить из этого набора.
Примеры:
Вход:
set[] = {'a', 'b'}, k = 3
Выход:
a
b
aa
ab
ba
bb
aaa
aab
aba
abb
baa
bab
bba
bbb
Вход:
set[] = {'a', 'b', 'c', 'd'}, k = 1
Выход:
a
b
c
d
- Delete a node in a single-linked list
Given a pointer to a node to be deleted in a singly linked list, delete the node. Note that we don’t have pointer to head node. Write a program to accomplish the task, pseudocode is accepted.
ПереводДан указатель на элемент односвязного списка, необходимо удалить этот элемент. Обратите внимание, что указатель на головной элемент не даётся. Напишите программу, выполняющую поставленную задачу, псевдокод приемлем.
- Comment remover
Write a program to remove comments from given C/C++ code.
ПереводНапишите программу, удаляющую комментарии из С/C++ кода.
Ответы будут даны в течение следующей недели — успейте решить. Удачи!
Решения
- Вопрос 1Верный ответ — 10, что было быстро вычислено.
- Вопрос 243. Правильный ответ был дан в первом же комментарии и объяснен в обсуждении в этой ветке.
- Задача 1Вариант решения:
// C# program to print all // possible strings of length k using System; class GFG { // The method that prints all // possible strings of length k. // It is mainly a wrapper over // recursive function printAllKLengthRec() static void printAllKLength(char[] set, int k) { int n = set.Length; for (int j=0; j<=k; j++) { printAllKLengthRec(set, "", n, j); } } // The main recursive method // to print all possible // strings of length k static void printAllKLengthRec(char[] set, String prefix, int n, int k) { // Base case: k is 0, // print prefix if (k == 0) { Console.WriteLine(prefix); return; } // One by one add all characters // from set and recursively // call for k equals to k-1 for (int i = 0; i < n; ++i) { // Next character of input added String newPrefix = prefix + set[i]; // k is decreased, because // we have added a new character printAllKLengthRec(set, newPrefix, n, k - 1); } } // Driver Code static public void Main () { Console.WriteLine("First Test"); char[] set1 = {'a', 'b'}; int k = 3; printAllKLength(set1, k); Console.WriteLine("\nSecond Test"); char[] set2 = {'a', 'b', 'c', 'd'}; k = 1; printAllKLength(set2, k); } }
- Задача 2Правильный подход к решению предложил Andy_U в этом комментарии. Код:
#include<stdio.h> #include<assert.h> #include<stdlib.h> /* Link list node */ struct Node { int data; struct Node* next; }; /* Given a reference (pointer to pointer) to the head of a list and an int, push a new node on the front of the list. */ void push(struct Node** head_ref, int new_data) { /* allocate node */ struct Node* new_node = (struct Node*) malloc(sizeof(struct Node)); /* put in the data */ new_node->data = new_data; /* link the old list off the new node */ new_node->next = (*head_ref); /* move the head to point to the new node */ (*head_ref) = new_node; } void printList(struct Node *head) { struct Node *temp = head; while(temp != NULL) { printf("%d ", temp->data); temp = temp->next; } } void deleteNode(struct Node *node_ptr) { struct Node *temp = node_ptr->next; node_ptr->data = temp->data; node_ptr->next = temp->next; free(temp); } /* Drier program to test above function*/ int main() { /* Start with the empty list */ struct Node* head = NULL; /* Use push() to construct below list 1->12->1->4->1 */ push(&head, 1); push(&head, 4); push(&head, 1); push(&head, 12); push(&head, 1); printf("Before deleting \n"); printList(head); /* I m deleting the head itself. You can check for more cases */ deleteNode(head); printf("\nAfter deleting \n"); printList(head); getchar(); return 0; }
- Задача 3Вариант решения:
// C++ program to remove comments from a C/C++ program #include <iostream> using namespace std; string removeComments(string prgm) { int n = prgm.length(); string res; // Flags to indicate that single line and multpile line comments // have started or not. bool s_cmt = false; bool m_cmt = false; // Traverse the given program for (int i=0; i<n; i++) { // If single line comment flag is on, then check for end of it if (s_cmt == true && prgm[i] == '\n') s_cmt = false; // If multiple line comment is on, then check for end of it else if (m_cmt == true && prgm[i] == '*' && prgm[i+1] == '/') m_cmt = false, i++; // If this character is in a comment, ignore it else if (s_cmt || m_cmt) continue; // Check for beginning of comments and set the approproate flags else if (prgm[i] == '/' && prgm[i+1] == '/') s_cmt = true, i++; else if (prgm[i] == '/' && prgm[i+1] == '*') m_cmt = true, i++; // If current character is a non-comment character, append it to res else res += prgm[i]; } return res; } // Driver program to test above functions int main() { string prgm = " /* Test program */ \n" " int main() \n" " { \n" " // variable declaration \n" " int a, b, c; \n" " /* This is a test \n" " multiline \n" " comment for \n" " testing */ \n" " a = b + c; \n" " } \n"; cout << "Given Program \n"; cout << prgm << endl; cout << " Modified Program "; cout << removeComments(prgm); return 0; }