Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Интересные и занимательные задачи по программированию > [C++] Задачки для новичков!


Автор: CppDevelopeR 7.1.2008, 15:57
Решил выложить задачки для начинающих программистов. Качество задач проверенно, сам по ним учился, поэтому и выкладываю!

1. Некоторый промежуток времени задан в секундах. Представить его в виде количества суток, часов, минут и секунд. Например, если задано число 1769404, то вывести надо 4 числа: 20 11 30 4 (1769404 секунд – это 20 суток, 11 часов, 30 минут и 4 секунды).

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

3. Даны переменные a и b. Напишите программу, которая будет менять значения этих переменных местами.

4. Найдите x4, выполнив наименьшее возможное число умножений. То же самое для 5. x7. 6. x8 7. x9. 8. x22.

9. Даны 2 числа. Вывести наибольшее из них.

10. Даны 3 числа. Вывести наибольшее из них.

11. Даны 4 числа. Если они все различны совпадают, выведите "yes", иначе – "no".

12. Определите количество дней в данном году (от 1600 до 3000 года н.э.) по современному календарю.

13. Выведите на правильном русском языке, сколько прошло лет с указанного года (между 1 и 2006 годом н.э.) до 2007 г. Например, если введено 1986, то надо вывести "21 год", а если 2002, то "5 лет".

14. Даны размеры сторон конверта и открытки. Определите, можно ли положить открытку в конверт не сгибая. (Стороны открытки должны быть параллельны сторонам конверта).

15. В первой строке указаны даты рождения Алисы, а во второй – Боба. Даты указаны в формате "год месяц день ". Определите, кто из них старше (выведите имя: "Alice" или "Bob").
 Пример:
1994 12 21
1994 8 21
Bob
 

16. Положение коня на шахматной доске задано двумя числами – номерами вертикального и горизонтального рядов. (Ряды нумеруются от 1 до 8). Найдите количество клеток, которые находятся под боем этого коня.

17. Вычислите ab, b ≥ 0.

18. Дано число х и основание системы счисления b ∈ [2; 10]. Вывести число x в системе счисления по основанию b "задом наперёд". 19. То же самое, но вывести число в обычном виде.

20. Найти наименьший простой делитель данного числа x > 1.

21. Проверьте, является ли данное число палиндромом. (Палиндромом называется число, которое не изменится, если поменять порядок цифр на противоположный. Пример: 58185).

22*. Игра "Быки и коровы". Правила игры состоят в следующем. Компьютер загадывает n-значное число, все цифры которого различны. Игрок пытается это число угадать. За один ход игрок называет число из n различных цифр, а компьютер выдаёт результат этой попытки в условных единицах – быках и коровах. Один бык соответствует одной цифре, которая входит в загаданное число и стоит на своём месте. Одна корова соответствует одной цифре, которая входит в число, но стоит не на своём месте.
Запрограммируйте эту игру для n=3 или для произвольного n < 9.

23*. Крестики-нолики. Вася и Петя любят играть в крестики-нолики 3x3, но у них неожиданно закончилась бумага. Помогите им – напишите программу, которая позволит им ставить крестики и нолики на экране монитора. В качестве примера, как мог бы выглядеть самый простой вариант подобной программы, приведён исполняемый файл krestiki (krestiki.exe). Но в этой программе есть ошибки, Ваша программа должна быть лучше. (Желательно использовать массив).



Автор: Demonspe 23.11.2008, 00:58
Спасибо! smile  а есть ещё?) или мож какой-нить сборник есть таких задачек (разделённых по темам) для новичков?

Автор: sikha 20.12.2008, 16:51
Могу поделиться вот этими задачками! ИМХО очень нормальные!
http://depositfiles.com/files/pjjz3gypx

Автор: cristaloleg 6.11.2009, 20:57
Вывести наибольшее из двух чисел, не используя ветвления, циклов и тп...ток арифметика smile 

ЗЫ одно решение точно есть!

Автор: JackyFox 28.12.2009, 10:32
Цитата(cristaloleg @  6.11.2009,  20:57 Найти цитируемый пост)
Вывести наибольшее из двух чисел, не используя ветвления, циклов и тп...ток арифметика


Расскажите, пожалуйста, как это решается.

Автор: 586 28.12.2009, 11:04
Цитата(JackyFox @  28.12.2009,  10:32 Найти цитируемый пост)
Цитата(cristaloleg @  6.11.2009,  20:57 Найти цитируемый пост)
Вывести наибольшее из двух чисел, не используя ветвления, циклов и тп...ток арифметика

Расскажите, пожалуйста, как это решается. 

Код
int a, b, c;
c = (a/b)*b | (b/a)*a;

Автор: JackyFox 28.12.2009, 14:06
Цитата(586 @  28.12.2009,  11:04 Найти цитируемый пост)
c = (a/b)*b | (b/a)*a;

Не будь переменные целоцисленными, получилось бы так:
(a/b)*b = a;
(b/a)*a = b;

В итоге — a|b.
Но т.к. у нас переменные целые, в скобках у нас уже округленный до целого промежуточный результат.
И поразрядное ИЛИ никак не хочет выдавать максимальное из двух чисел :(

Я тоже сейчас сижу, размышляю о том, что надо как-то хитро разделить, умножить, возвести в степень можеть быть. И на выходе этой сложной функции получить максимальное число. Но пока без результатно.

Автор: UniBomb 28.12.2009, 14:44
Можно поиграться с числовыми значениями true и false

Код

int a, b;
std::cout << (a>b)*a + (b>a)*b << std::endl;

Автор: JackyFox 28.12.2009, 14:50
UniBomb, вот это работает.
Но, мне кажется, «больше» и «меньше» — это чит smile

Автор: GoldFinch 28.1.2010, 17:00
деление - это неоптимально. надо сложение\вычитание\модуль

a+b = min(a,b)*2+abs(a-b) = max(a,b)*2 - abs(a-b)

значит

max(a,b) = (a+b + abs(a-b))/2

чистая математика, начальная школа

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)