e-olymp 8531. Делимость на числа

Задача

Задано натуральное число [latex] n\ [/latex]Делится ли оно одновременно на  [latex] a\ [/latex] и на  [latex] b\ [/latex]?

Входные данные

Три натуральных числа [latex] n\ [/latex], [latex] a\ [/latex], [latex] b\ [/latex], не больших [latex] 10^{9}\ [/latex].

Выходные данные

Выведите «YES» если [latex] n\ [/latex] делится одновременно на [latex] a\ [/latex] и на [latex] b\ [/latex]. Выведите «NO» иначе.

Тесты

Ввод Вывод
1 12 4 6 YES
2 10 5 6 NO
3 1056 22 6 YES
4 98 103 5 NO

Решение

Для проверки делимости [latex] n\ [/latex] на [latex] a\ [/latex] и [latex] b\ [/latex] воспользуемся тернарной операцией. Так, в зависимости от истинности или ложности высказывания  (n % a == 0) && (n % b == 0) будет выполнен вывод  YES  или  NO соответственно.

Код

Ссылки

Условие задачи

Решение

Результаты тестирования

e-olymp 206. Турист

Задача

Гена собирается на туристический слет учеников своей школы. В своем классе он был назначен ответственным за палатки. У себя дома он нашел 3 палатки: первая их них весит [latex]a_1[/latex] килограмм и вмещает [latex]b_1[/latex] человек, вторая весит [latex]a_2[/latex] килограмм и вмещает [latex]b_2[/latex] человек, третья весит [latex]a_3[/latex] килограмм и вмещает [latex]b_3[/latex] человек.

В классе Гены [latex]k[/latex] человек. Выясните, может ли он выбрать палатки так, чтобы в них все могли поместиться. При этом учитывайте, что выбранные палатки должны суммарно весить не более [latex]w[/latex] килограмм.

Входные данные

Первая строка содержит два целых числа [latex]k[/latex] и [latex]w[/latex] ([latex]1 \le k \le 15[/latex], [latex]1 \le w \le 30[/latex]). Вторая строка содержит шесть целых чисел: [latex]a_1,  a_2,  a_3,  b_1,  b_2,  b_3[/latex] ([latex]1 \le a_1,  a_2,  a_3 \le 15[/latex], [latex]1 \le b_1,  b_2,  b_3 \le 30[/latex]).

Выходные данные

Выведите YES, если палатки указанным образом выбрать можно, и NO в противном случае.

Тесты

Входные данные Выходные данные
10 10

5 5 6 6 4 5

YES
2 2

2 1 2 1 1 1

NO
15 30

10 3 10 5 11 7

NO
8 8

5 4 4 5 3 6

YES
5 30

6 1 12 2 10 1

NO

Код программы (вариант с тернарной операцией)

Код программы (линейный вариант)

Решение задачи

Путем полного перебора получим несколько вариантов выбора палаток: взять одну из трёх палаток, две из трёх, или все три. Зададим переменную flag типа bool, принимающую значение, равное значению логического выражения, которое истинно лишь в случае удовлетворения хотя бы одного из вариантов условиям вместимости и веса, и ложно, если ни один из вариантов не удовлетворяет этим условиям. Затем с помощью тернарной операции выведем YES, если значение flag равно true, или NO, в случае противном.

Во втором варианте кода в выводе вместо тернарной операции используются операции математические, ведь условие «если А, то B, а иначе — C» на языке математики можно представить как BA — C(A-1), A = {0,1}, и так как переменная типа  boolсодержит в себе значение либо 0, либо 1, а литералы типа char содержат не сами символы, а их числовой код из таблицы ASCII, то это вполне реализуемо. В данном коде происходит последовательное выведение трёх символов типа  char: «Y», «E» и «S» в случае  flag = 1, и «N», «O» и пробел, если  flag = 0 .  

Ссылки

E-Olymp

Ideone (вариант с тернарной операцией)

Ideone (линейный вариант)

MLoops8

Задача

Найти закономерность и написать программу, которая выводит аналогичную таблицу для любых чисел [latex]n>0[/latex] (количество столбцов) и [latex]m>0[/latex] (количество строк).

Входные данные

Два числа:количество столбцов и строк.

Выходные данные

Таблица размером n*m со следующей закономерностью:

+21++21++21++21++21++21++
1++21++21++21++21++21++21
+21++21++21++21++21++21++
1++21++21++21++21++21++21
+21++21++21++21++21++21++
1++21++21++21++21++21++21
+21++21++21++21++21++21++
1++21++21++21++21++21++21

Код

Упрощенный вариант

 

Тесты

[latex]n[/latex] [latex]m[/latex] Выходные данные
1 1  +
7 7 +21++21

1++21++

+21++21

1++21++

+21++21

1++21++

+21++21

 

15 6  +21++21++21++21

1++21++21++21++

+21++21++21++21

1++21++21++21++

+21++21++21++21

1++21++21++21++

 

25 8 +21++21++21++21++21++21++

1++21++21++21++21++21++21

+21++21++21++21++21++21++

1++21++21++21++21++21++21

+21++21++21++21++21++21++

1++21++21++21++21++21++21

+21++21++21++21++21++21++

1++21++21++21++21++21++21

Решение

Для решения сначала нужно найти закономерность чередования символов в таблице. Пусть нумерация столбцов и строк будет начинаться с единицы, тогда, если строка [latex]i \vdots 2[/latex], то символы в ней чередуются по такому принципу: если результат от прибавления номера столбца к 1 кратен 4 ([latex] (j+1)\vdots 4 [/latex]), то в данной строке и столбце находится «1», если же результат от прибавления номера столбца к 2 кратен 4([latex] (j+2)\vdots 4 [/latex]), то в данной строке и столбце находится «2», если ни одно из этих условий не выполняется, значит на данном месте находится «+».

Если же строка [latex]i\vdots 2[/latex], то символы в ней чередуются по такому принципу: если результат от прибавления номера столбца к 3 кратен 4 ([latex] (j+3)\vdots 4[/latex]), то в данной строке и столбце находится «1», а если номер столбца кратен 4([latex] j\vdots 4 [/latex]), то в данной строке и столбце находится «2», если ни одно из этих условий не выполняется, значит на данном месте находится «+».

Ссылки

Код программы 

Упрощенный код

Mloops 5

Условие задачи

Найдите закономерность и напишите программу, которая выводит аналогичную таблицу для любых чисел [latex] n>0 [/latex] (количество столбцов) и [latex] m>0 [/latex] (количество строк): +++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*+++++*++ .

Задача находится здесь.

Тесты

n m Таблица
1 25 8 +++++*+++++*+++++*+++++*+
++++*+++++*+++++*+++++*++
+++*+++++*+++++*+++++*+++
++*+++++*+++++*+++++*++++
+*+++++*+++++*+++++*+++++
*+++++*+++++*+++++*+++++*
+++++*+++++*+++++*+++++*+
++++*+++++*+++++*+++++*++
2 6 6 +++++*
++++*+
+++*++
++*+++
+*++++
*+++++
3 2 5 ++
++
++
++
+*

Алгоритм решения

Таблица, которую необходимо вывести на экран представляет собой определённую последовательность. Каждый символ таблицы имеет номера столбца и строки (нумерация от 0 до n или m не включительно). Для этого задаём счётчики [latex] i [/latex] и [latex] j [/latex] .  Наша задача — определить закономерность появления символа [latex] \ast [/latex] в данной таблице, поскольку в иных случаях необходимо вывести символ [latex] + [/latex]. В первой строке «звёздочка» встречается в данной таблице в [latex] 6,12,18,24[/latex] столбцах. Во второй строке «звёздочка» находится в [latex] 5,11,17,23[/latex] столбцах. В последующих строках ситуация аналогичная. Можно заметить, что символ [latex] \ast [/latex] стоит на позициях, при которых сумма номера строки и номера столбца делится нацело на 6. Проверяем это условие с помощью тернарной операции:

от суммы номеров столбца и строки отнимаем число [latex] 5 [/latex], поскольку нам необходимо, чтобы первыми пятью символами последовательности были плюсы.

Код программы

Ссылка на рабочий код программы находится здесь.