@starnightstars

Как задать условие для цикла?

Вещественная матрица 7 х 8 содержит расписание занятий студента в течение недели: каждая строка соответствует одному учебному дню, каждый столбец - номеру пары. Если занятия в данную пару у студента нет, то значение элемента равно 0. Если занятие есть, то оно обозначается номером предмета (номера предметов - от 1 до 9). Найти все "окна" в расписании студента. "Окно" - это одна или несколько подряд идущих незанятых пар,
до которых и после есть занятие.
Не могу понять как задать условие в цикле так, чтобы и 507 и 3006 (матрица ниже) считалось окном, а 001 не считается окном, при этом последняя строка - это условно воскресенье и не является учебным днем, то есть эти нули вообще не должны учитываться. То есть окно, когда нули стоят между цифрами 1-9. думаю, что здесь должен использоваться boolean, но не уверен в этом
import java.util.*;
public class Main
{
public static void main(String args[]){
int[][] matrix = {
{0, 0, 1, 5, 0, 7, 0, 0},
{2, 3, 0, 0, 6, 0, 0, 0},
{0, 4, 1, 0, 0, 8, 0, 0},
{9, 0, 2, 0, 3, 0, 0, 0},
{5, 9, 0, 0, 4, 0, 0, 0},
{0, 7, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0}
};
for(int i=0) {
if (i == 0)
}
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
По уму, надо выделять последовательность нулей в цикле и там смотреть, а не с начала ли дня она идет и не до конца ли дня.

Но можно проще. Считайте вообще все последовательности нулей. до какой-то пары (это значит сейчас 0 - а следующаяя ячейка не ноль.). Но так посчитаются недо-окна перед первыми парами. Вы можете эти недо-окна подсчитать. Это просто те дни, в которых в начале стоит 0. Но тут, вы правильно заметили, проблема. День в котором одни нули посчитается недо-окном и вычтется, но ничего к ответу не прибавит. Поэтому вам надо отдельно прибавить количество дней из одних только нулей.
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
Просто берёшь и все нули с начала строки заменяешь на, скажем, -1, пока не наткнёшься на ненулевое значение. Потом то же делаешь с конца.

Например, строка {0, 0, 1, 5, 0, 7, 0, 0} превратится в {-1, -1, 1, 5, 0, 7, -1, -1}.

Всё. Теперь все оставшиеся в массиве нули - это окна.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы