Комментарии - Software Technologies

advertisement
Header
Page 1 of 9
Данная
последовательность
вопросов
является
компиляцией
тестов
на
интеллектуальное развитие, олимпиадных задач по информатике и математике, а
также собственных разработок фирмы
«Программные Технологии». Данный тест
является интеллектуальной собственностью фирмы. При использовании материалов
теста ссылка на авторов обязательна. Вопросы на общий уровень развития и
вопросы по ООП являются собственными разработками «Программных Технологий» и
защищены законом об авторском праве.
Вопросы в тесте разбиты на две общие группы: основная (это задачи, теоретические вопросы и т.д.
) и дополнительная (это всевозможные загадки, вопросы, не имеющие ответа, и т.д.)
Сумма баллов подсчитывалась для двух категорий (поэтому результаты содержат две
колонки «Баллы» и «Культура») , зачисление во второй тур производилось по количеству
баллов в первой колонке.
1. Укажите, каков будет результат вычисления выражения:
i=5;
y=(i++)+(i++);
y=?
Реальный компилятор (Visual Studio 6) даст 10, но такое выражение опасно,
т.к.
согласно
стандарту
"Между
последовательными
точками
исполнения
скалярный объект может меняться не более одного раза в результате вычисления
выражения"
2. Четыре математических действия известны всем. Пятое – возведение в степень. Укажите шестое
и седьмое математические действия.
Извлечение корня и логарифмирование
По крайне мере, так утверждает книга «Игры и развлечения», М., "Молодая
гвардия", 1989, хотя такое утверждение и кажется спорным, т.к. извлечение
корня – это в общем случае возведение в дробную степень
3. Ниже приведена программа. Напишите, что будет выведено на экран в результате работы этой
программы.
#include <stdio.h>
void main()
{
char lang[4] = "C++";
int i = 3 //**/ 3
;
lang[i] = '\0';
printf("lang=%s", lang);
}
Результат работы данной программы зависит от используемого компилятора.
Компилятор языка С в строке, содержащей комментарии, поделит на 3, в
результате чего на экран будет выведено:
lang=C
а после компилятора С++ на экран будет выведено
lang=C++
4. В названии какой птицы сорок букв? (вопрос из дополнительной группы)
Сорока
5. В трехэтажном доме ремонтировали скрытую проводку. Наружу провода выходят только в
подвале и на чердаке. В том и другом случае вывод представляет собой пучок из 11
одинаковых проводов. Какой провод в верхнем выводе соответствует проводу в нижнем
выводе – неизвестно. У электрика есть только тестер, карандаш и бумага. Напишите способ
наиболее эффективного определения соответствия проводов в верхнем и нижнем выводах.
Анализ возможных вариантов решения этой задачи можно найти в книге М.
Гарднера "Математические головоломки и развлечения", М., Мир, 1971, с.104.
Вкратце, идея нахождения заключается в соединении всех проводов, кроме
одного, его потом легко выявить, используя тестер – на нем контакта нет, так
за 11 раз и выясним.
Software Technologies
77 Chekhov street, Taganrog, Rostov Region, Russia 347900.
Phone: +7(8634)315400. Fax: +7(8634)315300. Website: www.softech.ru Email: contact@softech.ru
Header
Page 2 of 9
6. Укажите, какой породы была собака Качалова ("Дай, Джим, на счастье лапу мне…")?
Доберман
(вопрос из дополнительной группы)
7. Укажите, возникнут ли ошибки при компиляции данной программы, если нет, то что она
выведет на экран:
#include <iostream>
using namespace std;
void f() {
static int x=3;
class A {public:
void g(){cout << "A"<< x;};
a.g();
x++;
}
int main() {f();f(); return 0;}
} a; // !!!
Не откомпилируется – в строке с комментарием переменная x не объявлена.
8. В "ним" играют следующим образом: на стол выкладывается 31 предмет, игрок может за один
ход взять не более 5 предметов. Взявший последний предмет проигрывает. Составьте
беспроигрышный алгоритм для игрока, делающего ход первым.
При таких правилах игрок, делающий ход первым, проигрывает всегда.
9. Используя только пять цифр "3" и знаки действий, запишите число 37 двумя способами.
33+3+3/3; 333/(3∙3).
Но был еще один потрясающий способ:
«string strRes = “” + 3 + toString(3 +3 + 3/3)»
10. Напишите, какая птица является однофамилицей русского писателя?
Гоголь
(вопрос из дополнительной группы)
11. Укажите, сколько вариантов ходов можно сделать в простой игре "Крестики-Нолики".
9!
12. Запишите названия всех "цветных" морей.
Белое, Черное, Желтое, Красное.
Можно добавить еще и Мраморное
(вопрос из дополнительной группы)
13. Существуют 6 "цветных" рек: Белая - приток Камы, Оранжевая - в Африке, Черная и
Красная – во Вьетнаме, Голубая – в Китае. Укажите, где находится Желтая река.
Река Хуанхэ, Китай
(вопрос из дополнительной группы)
14. Выберите и подчеркните правильный ответ: меркаторская проекция – это термин,
применяемый для названия: опорных элементов арочных мостов, метода черчения
географических карт, оптического явления, необходимого для получения телевизионного
изображения на экране.
15. Опишите, как устроена программа в ОС Windows?
Здесь нам хотелось бы услышать любой вразумительный ответ:
о цикле обработки сообщений, о том, как устроен exe файл , о потоках и процессах, о сегментах
памяти, в общем, все, что Вы сможете нам сообщить по этому поводу. В любом варианте ответа
Вы получаете балл, а при нескольких вариантах – дополнительные баллы
16. Укажите, чему будет равно r:
std::map<int, int> m;
m[0] = 10;
m[1] = 15;
m[2] = 20;
Software Technologies
77 Chekhov street, Taganrog, Rostov Region, Russia 347900.
Phone: +7(8634)315400. Fax: +7(8634)315300. Website: www.softech.ru Email: contact@softech.ru
Header
Page 3 of 9
std::map<int, int>::iterator p = m.begin();
int r = (p++)->second + (p++)->second;
Ответ: 25
17. Опишите, что такое файл, отображенный на память и для чего он нужен.
Файлы, отображенные на память, используются по нескольким причинам: а)
операционная система использует отображенные файлы для исполняемых файлов
.exe и .dll; при использовании отображенных на память файлов не тратится
время на выполнение файловых операций ввода-вывода; отображенный на память
файл может быть использован разными процессами для обмена данными. При
отображении файла на память операционная система берет на себя все заботы о
буферизации, кэшировании и пр. Более подробно об этом механизме можно
прочитать в MSDN и в книге Jeffrey Richter. Programming Applications for MS
Windows 4th ed.
18. Из листа бумаги размером ab см вырезают квадраты по
углам и делают прямоугольную коробку. Напишите
алгоритм, определяющий какой квадрат надо вырезать,
чтобы объём коробки был наибольшим.
Конечно, эту задачу можно решить и перебором, но
такое решение не принесет много баллов. Лучше
было бы записать зависимость объема коробки от
стороны квадрата, найти ее максимум, и, получив таким образом расчетную
формулу, закодировать ее.
Пусть сторона квадрата равна x, тогда объем коробки равен x(a-2x)(b -2x),
или 4x3 -2ax2 – 2bx2 + abx, вполне нормальное уравнение. Дифференцируем,
находим корни – и вот он, ответ.
19. Напишите название города, в котором один мужчина и сто женщин.
Севастополь
(вопрос из дополнительной группы)
20. Напишите фрагмент программы на любом языке программирования, преобразовывающий все
символы входного массива char из верхнего регистра в нижний.
Смысл производимых действий прост – из ASCII кода каждой буквы вычесть разницу между
ее прописным и строчным символом. Есть два подводных камня – необходимо разделять
случаи русских и английских букв, во-первых, у низ разное расстояние между заглавными и
строчными, а во-вторых, русский алфавит прерывается превдографикой где-то в районе буквы
«р».
21. Обычное зеркало меняет местами правое и левое. Придумайте и нарисуйте
зеркало, меняющее местами верх и низ.
Можно предложить три варианта такого зеркала: плоское зеркало,
находящееся на потолке (не очень удобно – либо все время
смотреть вверх, либо лежать); зеркало, представляющее собой
внутреннюю часть цилиндра, разрезанного вдоль оси вращения;
зеркало, составленное из двух плоских зеркал, угол между
которыми равен 90.
22. Напишите функцию, вычисляющую произведение двух векторов, заданных своими
координатами.
В задании не указано, какое именно произведение вычисляется – скалярное или векторное, т.е.
необходимо предусмотреть оба случая
23. Два парома отходят одновременно от противоположных берегов реки и пересекают ее
перпендикулярно берегам. Скорости паромов постоянны, но у одного больше, чем у другого.
Паромы встречаются друг с другом на расстоянии 720 м от ближайшего берега. Прежде чем
Software Technologies
77 Chekhov street, Taganrog, Rostov Region, Russia 347900.
Phone: +7(8634)315400. Fax: +7(8634)315300. Website: www.softech.ru Email: contact@softech.ru
Header
Page 4 of 9
плыть обратно, оба парома 10 минут стоят у берега. На обратном пути они встречаются в 400
м от другого берега реки. Вычислите и напишите ширину реки.
Для решения этой задачи время стоянки паромов не имеет
никакого значения.
К моменту первой встречи паромов сумма пройденных ими
расстояний равна ширине реки. Когда каждый из них причаливает
к противоположному берегу, эта сумма равна удвоенной ширине
реки, а когда они встречаются второй раз, сумма пройденных
ими расстояний в три раза больше ширины реки. Так как паромы
двигаются с постоянной скоростью в течение одного и того же
промежутка времени, то к моменту второй встречи каждый из них прошел
расстояние втрое больше пройденного к моменту первой встречи. Это расстояние
равно ширине реки. Поскольку белый паром прошел до первой встречи 720 м, к
моменту второй встречи все пройденной расстояние равно 7203=2160 м. Из
рисунка видно, что это расстояние больше ширины реки на 400 м. Получаем:
ширина реки равна 1760 м.
24. Укажите, когда мы ближе к Солнцу: в полдень или вечером?
Поскольку Земля вращается вокруг Солнца по эллиптической орбите, то с 1
января по 1 июля Земля удаляется от Солнца, а с 2 июля по 31 декабря –
приближается к нему. Следовательно, с января до июля в полдень мы ближе к
солнцу, чем вечером, а с июля до января – наоборот. Игры и развлечения, М.,
"Молодая гвардия", 1989., стр. 48, 61.
25. Напишите, какого рода слово "умница"?
Слово "умница" – общего рода.
(вопрос из дополнительной группы)
26. Известен способ шифрования текста с помощью матрицы-ключа,
имеющей вид решетки с вырезанными отверстиями, обозначенными
на рисунке черными квадратами. Через отверстия в матрице
последовательно записываются символы шифруемого текста, затем
решетка поворачивается на 90 градусов, после чего процедура записьповорот осуществляется еще 3 раза. Составьте и запишите алгоритм
формирования любой пригодной для использования матрицы-ключа.
Собственно алгоритм формирования матрицы следует из
условия задачи: делим исходную матрицу на четыре одинаковых квадрата, один
из них заполняем случайным образом нулями и единицами, а затем копируем этот
маленький квадрат во все остальные квадраты, поворачивая при каждом
копировании.
27. Напишите фамилии людей, проживавших по адресу: Лондон, Бейкер стрит, 221б.
Холмс, Ватсон, Хадсон
(вопрос из дополнительной группы)
28. Найдите и запишите внутренний угол при вершине правильной пятиконечной звезды.
Как известно, величина вписанного в окружность угла, опирающегося на дугу,
равна половине дуги в градусах. Отсюда угол при вершине правильной
пятиконечной звезды равен 360:5:2=36.
29. Сформулируйте и запишите признак делимости на 11.
а) надо из суммы всех цифр, стоящих на нечетных местах, вычесть сумму всех
цифр, занимающих четные места; если в результате получится 0 или число
кратное 11, то и испытываемое число делится на 11;
б) для небольших чисел их разбивают справа налево на грани по две цифры в
каждой и складывают эти грани; например, проверим число 528: разбиваем на
грани – 5/28, 5+28=33 – следовательно, 528 делится на 11.
Игры и развлечения, М., "Молодая гвардия", 1989., стр. 99.
30. Опишите, что такое исключения и для чего они используются.
Software Technologies
77 Chekhov street, Taganrog, Rostov Region, Russia 347900.
Phone: +7(8634)315400. Fax: +7(8634)315300. Website: www.softech.ru Email: contact@softech.ru
Header
Page 5 of 9
Ответ на этот вопрос можно посмотреть практически где угодно, в учебниках по С++, в
MSDN и т.д.
31. Дан массив, размером 100, заполненный неупорядоченной последовательностью целых 1..100.
Одно число из него приравнивается нулю. Напишите фрагмент программы, определяющий это
число.
Поскольку массив из 100 элементов заполнен числами от 1 до 100, то
достаточно вычислить сумму арифметической прогрессии и вычесть из нее сумму
элементов
массива
после
удаления
одного
числа.
Результат
и
будет
представлять собой удаленное число.
32. Напишите имена людей, проживавших по адресу: Лондон, Бейкер стрит, 221б.
Шерлок и Джон, имя миссис Хадсон не упоминается.
(вопрос из дополнительной группы)
33. Укажите, какого литературного персонажа чаще всего экранизировали в игровом
кино?
Ш.Холмс – 211 фильмов, граф Дракула – 160 фильмов, Франкенштейн –
115 фильмов
(вопрос из дополнительной группы)
34. Шары диаметром D уложены, как показано на рисунке. Найдите и запишите расстояние
между центрами любой пары шаров.
Шары
образуют
правильную
пирамиду,
следовательно,
достаточно рассмотреть любые три шара, чтобы найти
расстояние между их центрами, оно равно D.
35. Даны два прототипа функций:
void Foo(float,float,float);
void Foo(float,float,int);
Вызов
Foo(2.5, 3.6, 4); // работает
а
Foo(2.5, 3.6, 4.7); // не работает
Обоснуйте и запишите, почему.
Во втором вызове – неоднозначность. Число 4.7 может быть приведено
компилятором к целому типу, следовательно, компилятор не знает, какую из
двух функций ему выбрать.
36. Через центр шара просверлено отверстие длиной 6 см.
Вычислите и напишите объем оставшейся части шара.
Объем оставшейся части цилиндра равен 36 и не
зависит от размера сферы и диаметра отверстия.
Подробнее
см.
М.
Гарднер
"Математические
головоломки и развлечения", М., Мир, 1971, с.108.
1.
Можно поговорить о нескольких путях решения этой задачи –
математический - либо вычисляя предел суммы площадей
различных окружностей (только осторожней с пределами), либо
беря интеграл по окружности, что по сути одно и тоже (опять же, не забыв про пределы
интегрирования).
2.
простой математический формулы объема шара и цилиндра хорошо известны, а объем «шапочки шара»,
можно попробовать вычислить, применяя формулы вычисления объема тел вращения.
V =   f(x)2 dx =   (R – x2) dx
Пределы – нижний 0, верхний R – 3
3.
физический - плотность материала шара умножить на массу оставшегося от шара кусочка
Software Technologies
77 Chekhov street, Taganrog, Rostov Region, Russia 347900.
Phone: +7(8634)315400. Fax: +7(8634)315300. Website: www.softech.ru Email: contact@softech.ru
Header
Page 6 of 9
4.
силовой – переплавить оставшийся сегмент шара в любую другую, чей объем легко вычислить – куб,
например.
5.
архимедов – бросить фигуру в воду и измерить вытесненный объем воды
я думаю, это не весь список методов
37. Подсчитайте и укажите максимальное и минимальное количество пятниц в феврале.
Если первое февраля високосного года падает на пятницу, то пятниц в феврале
окажется 5. Однако можно получить и другой ответ. Рассмотрим корабль,
курсирующий между восточным берегом Сибири и Аляской. Каждую пятницу корабль
покидает азиатский берег и так как он пересекает линию смены дат с запада на
восток, то будет иметь две пятницы еженедельно. Корабль, покидающий
американский берег каждый четверг, будет терять как раз пятницу, то есть за
месяц он не насчитает ни одной пятницы. Подробнее см. М. Гарднер
"Математические головоломки и развлечения", М., Мир, 1971.
38. В выражении H 4  O 4  M 4  E 4  HOME 4 буквами обозначены цифры. Запишите
программу, определяющую все возможные наборы цифр, удовлетворяющих этому равенству.
Решается перебором
39. Самолет стоит на ленте транспортера, управляемой идеальной системой автоматического
регулирования. Как только колеса самолета начинают вращаться, система управления
начинает двигать ленту в сторону вращения колес. Укажите, сможет ли самолет взлететь?
Если это самолет не с вертикальным взлетом и посадкой, то он не сможет
взлететь с такой идеальной ленты.
40. Запишите третий постулат теории относительности Эйнштейна.
Не существует
(вопрос из дополнительной группы)
1 1 1 1 1
    ...) .
1 3 5 7 9
41. Число  можно вычислить, используя формулу Лейбница:   4  ( 
Напишите программу, вычисляющую сто знаков после запятой.
Так как число, содержащее 100 знаков после запятой, не поместится в
разрядной сетке компьютера, то придется вычислять эти знаки по очереди и
помещать их символьное представление в ячейки соответствующего массива.
42. Напишите, где находится самое высокое здание в мире?
Город Тайбэй, Тайвань – 550 м.
43. Напишите программу, выводящую все четырехзначные числа, в десятичной записи которых
нет двух одинаковых цифр.
Тоже перебором, но можно оптимизировать
44. Укажите, в каком штате Индии находится храм Ангкор-Ват.
Храм Ангкор-Ват существует, хотя и находится не в Индии, а в Кампучии.
45. Составьте и запишите алгоритм текстового поиска слова в словаре.
Словарь – практически любой – содержит слова в алфавитном порядке, так что надо было
описать процедуру типичного бинарного поиска
46. Дан многоугольник на плоскости, заданный целочисленными координатами своих вершин, и
массив точек. Напишите программу, которая подсчитывает количество точек лежащих внутри
многоугольника.
Несколько человек решили задачу перебором, но никто не учел случай, когда прямоугольник
невыпуклый
Software Technologies
77 Chekhov street, Taganrog, Rostov Region, Russia 347900.
Phone: +7(8634)315400. Fax: +7(8634)315300. Website: www.softech.ru Email: contact@softech.ru
Header
Page 7 of 9
47. Магическим называется квадрат, у которого суммы чисел по строкам, столбцам и обеим
диагоналям одинаковы. Запишите алгоритм составления магического квадрата размером 4 на
4.
Самый простой способ сформировать магический квадрат – это разместить числа
по порядку в ячейках квадрата, а затем поменять местами числа, находящиеся
на
главных
диагоналях
симметрично
относительно
центра.
48. Запишите, чему равен угол, образованный двумя
касательными к окружности (см. рис.)
Если считать, что 2r – это расстояние от точки O до
окружности,
считать,
то
что
угол
2r
–
1
,
3
равен
2  arcsin
это
расстояние
окружности, тогда угол равен
2  arcsin
а
до
если
центра
1
2
49. Укажите, при лечении каких заболеваний применяют невадский газ.
Невадский газ использовался властями США для казни преступников, он содержит
цианиды.
50. Есть текст, содержащий m строк по n символов. Между словами может быть случайное число
пробелов от 1 до k . Напишите программу, форматирующую текст в тех же пределах, пробелы
равномерно распределяются по длине строки.
Сравнительно легко решается простым перебором, но значительно проще для
подсчета слов, пробелов и т.д. пользоваться регулярными выражениями.
51. Трехмерными координатами вершин заданы точка наблюдения и два треугольника. Составьте
алгоритм, определяющий виден ли дальний треугольник из-за ближнего.
Довольно типичная задача по графике, можно реализовать методом «Z-буфера» или
«плавающим горизонтом», подробнее – любой учебник по КГ
52. Укажите, будет ли работать приведенная ниже программа, есть ли в ней ошибки:
void main(void)
{
cin >> a >> b >> c;
float root1, root2;
float discr = b * b – 4 * a * c;
if((discr > 0) && (sq_discr = sqrt(discr))){
root1 = (-b + sq_discr) / (2 * a);
root2 = (-b – sq_discr) / (2 * a);
}
else{
root1 = root2 = - b / (2 * a);
}
cout << root1 << root2;
}
Если не считать ошибкой отсутствие объявлений переменных, то эта программа
будет работать, так как из-за короткого вычисления при отрицательном discr
квадратный корень не вычисляется
Заметим, при этом, что вычислять корни программа будет неверно: ведь при
отрицательно дискриминанте корни комплексные, также не учтен случай
вырожденности уравнения, когда а = 0.
53. Укажите, что выведет на экран следующая программа:
int foo(int n)
{
Software Technologies
77 Chekhov street, Taganrog, Rostov Region, Russia 347900.
Phone: +7(8634)315400. Fax: +7(8634)315300. Website: www.softech.ru Email: contact@softech.ru
Header
Page 8 of 9
static int count = 0;
++count;
if(n <= 1){
cout << " счетчик: " << count << endl;
return n;
}
else{
foo(n / 3);
}
}
void main(void)
{
foo(21);
foo(27);
foo(243);
}
count: 4
count: 8
count: 14
54. Укажите, сколько преступников задержал лично Ниро Вульф?
Ни одного, это выдуманный литературный герой,
раскрывать преступления, не выходя из кабинета.
которого
автор
заставил
(вопрос из дополнительной группы)
55. Ниже приведен фрагмент кода, написанный неизвестным программистом. Укажите,
как бы Вы посоветовали улучшить этот код?
char * strcpy(char * pcDest, char * pcSourse)
{
do {*pcDest++=*pcSourse++}
while (*pcSourse);
return(pcDest);
}
типичное замечание – нет гарантии, что строка оканчивается нулем,
это зависит от компилятора
56. Напишите название оперы, главную партию в которой спел Ллойд Вебер.
Вебер оперы писал, но в них не пел
(вопрос из дополнительной группы)
57. Сторона клетки на шахматной доске равна 4 см. Найдите и запишите
радиус наибольшей окружности, которую можно нарисовать на шахматной
доске, так, чтобы она проходила только по черным клеткам.
Удастся нарисовать только окружность радиусом 22
58. Кирпич лежит на наклонной плоскости, прилегая к ней всей плоскостью. Укажите,
какая половина кирпича оказывает большее давление на плоскость.
Большее давление оказывает левая половина кирпича, так как существует момент
сил, вращающий кирпич относительно его центра масс.
Тест для тестеров также содержал вопросы из серии «придумайте как можно больше
способов сделать что-либо» или «придумайте устройство чего-то» или «дайте объяснение
чему-то», ответы на эти вопросы должны были быть как можно более полными.
Например, как можно больше способов довести до кипения воду:
Простые
- поставить на огонь (любой другой горячий предмет)
- сильно повысить температуру чайника – трением, например
Software Technologies
77 Chekhov street, Taganrog, Rostov Region, Russia 347900.
Phone: +7(8634)315400. Fax: +7(8634)315300. Website: www.softech.ru Email: contact@softech.ru
Header
Page 9 of 9
- сильно повысить температуру окружающей среды – поставить чайник в сосуд с кипящим
железом
Чуть сложнее
- сильно понизить давление,
вода закипит и при температуре, равной, температуре
окружающей среды
- сконцентрировать тепловую энергию света на чайнике (система зеркал, лазер)
- провести хим.реакцию – бросить в воду карбид ?
- кинуть в воду очень горячий предмет
Самые интересные
- заплатить другому человеку – пусть он ее вскипятит
- конденсировать пар обратно в точку кипения – получим кипящую воду
- взять кипяток у соседа, выполняющего такое же задание
- уговорить воду закипеть самостоятельно (не совсем себе это представляю)
- погрузиться в медитацию и довести воду до кипения при помощи собственных внутренних
резервов
и т.д. – полет фантазии не ограничен.
Software Technologies
77 Chekhov street, Taganrog, Rostov Region, Russia 347900.
Phone: +7(8634)315400. Fax: +7(8634)315300. Website: www.softech.ru Email: contact@softech.ru
Download