Задача. Многоквартирный дом имеет [latex]N[/latex] квартир, [latex]P[/latex] подъездов и [latex]Q[/latex] этажей, причем на каждом этаже каждого подъезда имеется одинаковое количество квартир. Определить в каком подъезде и на каком этаже находится квартира с заданным номером [latex]K[/latex].
Входные данные
В единственной строке файла записаны значения [latex]N[/latex], [latex]P[/latex], [latex]Q[/latex], [latex]K[/latex]. [latex]1[/latex] ≤ [latex]K[/latex] ≤ [latex]N[/latex] ≤ [latex]1000[/latex], [latex]P\cdot Q[/latex] ≤ [latex]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 | #include <iostream> using namespace std; int main() { 	int N, P, Q, K, flatEntrance, flatFloor, entrance, floor; 	cin >> N >> P >> Q >> K; 	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++; 		    }     }     cout << entrance << " " << floor << endl; 	return 0; } | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> #include <math.h> using namespace std; int main() { 	int N, P, Q, K, flatEntrance, flatFloor, entrance, floor; 	cin >> N >> P >> Q >> K; 	flatEntrance = N/P;     flatFloor = N/P/Q; 	entrance = ceil(double(K)/flatEntrance); 	if (K%flatEntrance == 0){ 	    floor = Q; 	} else { 		    floor = ceil((K%flatEntrance)/double(flatFloor));      }     cout << entrance << " " << floor << endl; 	return 0; } | 
Засчитанное решение
