Определить, на каком этаже находится квартира
Дано количество квартир (n), подъездов (p), этажей (q) и сам номер квартиры (k). Определить, на каком этаже и в каком подъезде находится заданная квартира под номером k.
Немного пояснений: n - это количество квартир, т. е. квартир во всем доме. n - сумма кол-ва квартир во всех подъездах.
Потому и даются подъезды - неизвестно, сколько квартир в 1 подъезде. На пример вводятся такие данные: 18 3 3 16. Здесь этажей 3, подъездов 3, а в каждом p находятся по 6 квартир.
Вот данные примера в виде таблицы:
1,2 7,8 13,14
3,4 9,10 15,16
5,6 11,12 17,18
Ответом в данном примере будут числа 3 и 2. 3 подъезд, 2 этаж. Думаю, я прояснил. По крайней мере, как я понимаю данную задачу: https://clck.ru/NcmBu
Вот моя попытка. Подъезд определяет вроде всегда правильно, а вот с этажами проблема - никак не получается. Пробовал обычным перебором - не вышло:
using System;
using System.Linq;
class Program
{
public class CSharpSrudy2
{
static void Main(string[] args)
{
string str1 = Console.ReadLine();
int[] arr = str1.Split(' ').Select(w => Convert.ToInt32(w)).ToArray();
int n = arr[0], p = arr[1], q = arr[2], k = arr[3];
int pod = 0, et = 0;
int i = 0;
int y = n / p;
int x = y / q;
if (k <= y)
{
pod = 1;
while (i <= y)
{
if (k <= i)
{
break;
}
et++;
i += x;
}
}
if (k > y)
{
while (k > y)
{
pod++;
y *= 2;
}
pod++;
}
y = n / p;
if (k > y)
{
for (i = ((pod - 1) * y) + 1; i < pod * y; i += x)
{
if (k < i)
{
if (k == i)
{
et++;
}
break;
}
et++;
}
}
Console.WriteLine(pod + " " + et);
Console.ReadLine();
}
}
}
Ответы (2 шт):
Квартиры 1..n*q расположены в первом подъезде, n*q+1..2*n*q во втором и т. д. Как этим воспользоваться? С помощью целочисленного деления:
a = (k-1) / (n*q) + 1
Минус единица и плюс единица здесь из-за того, что нумерация идёт с 1, а не с 0.
Далее, номер квартиры в подъезде, тоже самое, но надо брать остаток от деления, а не частное:
b = (k-1) % (n*q) + 1
По аналогии определяем этаж:
c = (b-1) / n + 1
Номер квартиры на этаже:
d = (b-1) % n + 1
Непонятно для чего задано число подъездов p, может быть для проверки граничных условий или может быть несколько домов?
На этаже находятся s = n / (p * q) квартир.
В одном подъезде sp = n / p квартир.
Номер подъезда np = 1 + (k - 1) / sp
Номер этажа ne = 1 + ((k - 1) % sp) / s
Деление целочисленное.
Проверяем на 30 2 5 27:
s = 3
sp = 15
np = 1 + 26/15 = 2
ne = 1 + (26 % 15) / 3 = 1 + 11/3 = 4
Проверяем на 18 3 3 16:
s = 2
sp = 6
np = 1 + 15/6 = 3
ne = 1 + (15 % 6) / 2 = 1 + 3/2 = 2