Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с кодом, пожалуйста, кто хорошо разбирается с кодингом

SmailDash14 Ученик (173), на голосовании 1 год назад
Сегодня необычный день — курьер привёз посылки для каждого жильца вашего дома! Нельзя пропустить ни одной квартиры — в каждую нужно что-то доставить. Чтобы не запутаться, курьер решил обходить все этажи и квартиры строго последовательно в порядке возрастания.
Всего в доме 10 этажей. На каждом из них по 5 квартир — их число хранится в переменной flatsNumber. Используя вложенные циклы, напишите программу для учёта работы курьера, которая будет печатать номера этажей и квартир и сообщение, что посылка доставлена.
При смене этажа нужно учитывать те квартиры, где курьер уже побывал. Для этого потребуется высчитывать номер текущей квартиры и сохранять его в переменную currentFlat — в формуле используйте переменные обоих циклов и flatsNumber. В результате для квартир должна получиться последовательность от 1 до 50:
___________________________________________
public class Praktikum {
public static void main(String[] args) {

int flatsNumber = 5; // Количество квартир на этаже
int floorsNumber = 10; // Количество этажей

for (int i...; ...; ...) {
for (int j...; ...; ...) {
int currentFlat = (... - 1) * ... + ...; // Заготовка формулы для учёта квартир
System.out.println("Этаж " + ... + " квартира " + ... + " — доставлено.");
}
}
}
}
Голосование за лучший ответ
Андрей Панарин Искусственный Интеллект (249310) 1 год назад
Смотрите. Если у нас двойной цикл, то внешний цикл много раз запускает внутри себя внутренний цикл.

Курьер сначала проходит все квартиры на первом этаже, потом все на втором и так далее. То есть внутренний цикл должен целиком пройти все квартиры на одном этаже, и только потом внешний цикл поднимет курьера на один этаж, чтобы повторить обход квартир уже на новом этаже.

Этажи меняются от 1 до 10 во внешнем цикле:
 for (int i = 1; i <= floorsNumber; i++) { 
Нумерацию квартир можно сделать во внутреннем цикле при помощи переменной j, меняя ее от 1 до 5.
 for (int j = 1; j <= flatsNumber; j++) { 
На первом этаже у нас квартиры 1, 2, 3, 4, 5 (от 1 до flatsNumber).

На втором этаже квартиры 6, 7, 8, 9, 10.
Тоже пять чисел, идущих подряд, но все числа на 5 больше, чем на первом этаже.

На третьем этаже квартиры 11, 12, 13, 14, 15.
На четвертом - 16, 17, 18, 19, 20.

Этаж растет на 1, а номера квартир растут на 5. Каждый раз.

Поэтому мы могли бы рассчитать номер квартиры, полагаясь на номер этажа.

i * 5 + j может дать нужный сдвиг.
Проблема в том, что так сдвиг возникает уже на первом этаже:
i = 1, j = 1..5
currentFlat = i * 5 + j = 1 * 5 + j = 5 + j = 5 + 1..5 = 6..10

Это не вариант. Наверное, нужно вместо i взять i - 1.

(i - 1) * 5 + j
i = 1, j = 1..5
currentFlat = (i - 1) * 5 + j = (1 - 1) * 5 + j = 0 + j = j = 1..5

Попробуем второй этаж:
i = 2, j = 1..5
currentFlat = (i - 1) * 5 + j = (2 - 1) * 5 + j = 5 + j = 5 + 1..5 = 6..10

Годится.
По аналогии можно догадаться, что для третьего этажа сдвиг будет 2 * 5 = 10.
Для четвертого этажа - 3 * 5 = 15.
И так далее для любого этажа.
 int currentFlat = (i - 1) * flatsNumber + j; 
Осталось самое легкое - написать вывод этажа i и квартиры currentFlat.
Похожие вопросы