Задача. Многоквартирный дом имеет [latex]N[/latex] квартир, [latex]P[/latex] подъездов и [latex]Q[/latex] этажей, причем на каждом этаже каждого подъезда имеется одинаковое количество квартир. Определить в каком подъезде и на каком этаже находится квартира с заданным номером [latex]K[/latex].
Входные данные
В единственной строке файла записаны значения [latex]N, P, Q, K. 1 \leq K \leq N \leq 1000, P \times Q \leq N.[/latex]
Выходные данные
В единственную строку файла нужно вывести номер подъезда и этаж, на котором находится квартира с номером [latex]K.[/latex]
Задача взята с сайта e – olymp.
Тесты
Входные данные | Выходные данные |
250 5 5 1 | 1 1 |
30 2 5 27 | 2 4 |
300 3 10 111 | 2 2 |
80 5 4 77 | 5 4 |
98 7 2 39 | 3 2 |
90 3 15 90 | 3 15 |
Перед нами была поставлена задача определить в доме с заданным количеством квартир, подъездов и этажей положение конкретной квартиры, а именно указать номер подъезда и этаж. Для дальнейшего хода решения определим две целочисленные переменные – flatEntrance (количество квартир в одном подъезде) и flatFloor (количество квартир на одном этаже). Найдем номер подъезда получив целую часть от деления номера квартиры на количество квартир в одном подъезде. Далее выполняем проверку остатка от деления, если он отличен от нуля, то это указывает на то, что квартира находится уже в следующем подъезде. В таком случае инкрементируем переменную entrance.
Для нахождения номера этажа поступим аналогично. Однако следует проверить не делится ли номер квартиры на количество квартир в одном подъезде нацело, если да – она располагается на последнем этаже. Если этого не сделать, то в последующей формуле получим [latex]0[/latex]. В общем случае номер этажа находим поделив остаток от деления номера квартиры на количество квартир в подъезде на количество квартир на этаже (учитываем, что каждый новый подъезд предполагает продолжение нумерации с первого этажа). И снова выполняем проверку остатка от деления. При надобности инкрементируем переменную floor.
Код программы:
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 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { int N, P, Q, K, flatEntrance, flatFloor, entrance, floor; Scanner sc = new Scanner(System.in); N = sc.nextInt(); P = sc.nextInt(); Q = sc.nextInt(); K = sc.nextInt(); flatEntrance = N/P; flatFloor = N/P/Q; entrance = K/flatEntrance; if (K%flatEntrance != 0){ entrance++; } if (K%flatEntrance == 0){ floor = Q; } else { floor = (K%flatEntrance)/flatFloor; if (K%flatFloor != 0){ floor++; } } System.out.format("%d %d", entrance, floor); } } |