Дан план замка в виде матрицы:
1 0 1 0 1
1 1 1 0 1
1 0 1 1 1
1 0 0 1 1
("1", если есть стена, а "0", если нет стены).
Вывести количество непрерывных вертикальных и горизонтальных стен.
То есть, тут 5 вертикальных стен и 9 горизонтальных стен.
Java
Java | Помогите, пожалуйста с задачей.
Пусть размеры замка - n строк * m столбцов.
1) Создайте две целочисленные переменные, инициализируйте их нулями, пусть будут v и g. Каждая переменная - количество стен таких и сяких.
2) Заведите две логические переменные и инициализируйте их значением false, назовём их b0 и b1. Они будет true, если вы "идёте вдоль определённой стены", об этом позже.
3) Ходите в цикле по строкам от нулевой до n-2 строки включительно. Внутри этого цикла:
{
Если b0 или b1, то увеличьте g на 1 и приравняйте b0 и b1 к false.
Вложите другой цикл по столбцам от нулевого до m-1 включительно. Внутри второго цикла:
{
Если текущий элемент равен 1 и элемент на следующей строке и в том же столбце равен 0, то b0 приравняйте к true и (если b1, то приравняйте b1 к false и увеличьте g на 1).
Если текущий элемент равен 0 и элемент на следующей строке и в том же столбце равен 1, то b1 приравняйте к true и (если b0, то приравняйте b0 к false и увеличьте g на 1).
Если текущий элемент равен элементу на следующей строке и в том же столбце, то
{
если (b0 или b1),то увеличьте g на 1.
b0 и b1 приравняйте к false.
}
}
}
4) Повторите пункт 3), поменяв в нём местами
g и v
n и m
строки и столбцы
5) Выведите результат, содержащийся в g и v.
Всё.
Что бы реализовать это на Java нужно знать про цикл for, if, многомерные массивы, числовые и логические переменные и операции над ними. Всё это если не знакомо, то гуглится и изучается за 10-15 минут, если особо не напрягаться.
Надеюсь, помог с задачей. Если что-то не понятно, то уточните, поясню/отвечу.
1) Создайте две целочисленные переменные, инициализируйте их нулями, пусть будут v и g. Каждая переменная - количество стен таких и сяких.
2) Заведите две логические переменные и инициализируйте их значением false, назовём их b0 и b1. Они будет true, если вы "идёте вдоль определённой стены", об этом позже.
3) Ходите в цикле по строкам от нулевой до n-2 строки включительно. Внутри этого цикла:
{
Если b0 или b1, то увеличьте g на 1 и приравняйте b0 и b1 к false.
Вложите другой цикл по столбцам от нулевого до m-1 включительно. Внутри второго цикла:
{
Если текущий элемент равен 1 и элемент на следующей строке и в том же столбце равен 0, то b0 приравняйте к true и (если b1, то приравняйте b1 к false и увеличьте g на 1).
Если текущий элемент равен 0 и элемент на следующей строке и в том же столбце равен 1, то b1 приравняйте к true и (если b0, то приравняйте b0 к false и увеличьте g на 1).
Если текущий элемент равен элементу на следующей строке и в том же столбце, то
{
если (b0 или b1),то увеличьте g на 1.
b0 и b1 приравняйте к false.
}
}
}
4) Повторите пункт 3), поменяв в нём местами
g и v
n и m
строки и столбцы
5) Выведите результат, содержащийся в g и v.
Всё.
Что бы реализовать это на Java нужно знать про цикл for, if, многомерные массивы, числовые и логические переменные и операции над ними. Всё это если не знакомо, то гуглится и изучается за 10-15 минут, если особо не напрягаться.
Надеюсь, помог с задачей. Если что-то не понятно, то уточните, поясню/отвечу.
Похожие вопросы
- JAVA. Помогите, пожалуйста, дописать код программы:
- Помогите пожалуйста с задачей первого курса.
- Ошибка с java в intellij idea помогите пожалуйста
- Помогите пожалуйста задачи для Java.
- Помогите please решить задачу Java: Дано координату шахматного коня например е2.Требуется вывести все варианты хода коня
- Помогите пожалуйста, изучаю язык Java. Не понимаю как написать код((
- Помогите пожалуйста написать методы,java, Кто даст ответ дам 100 балов подарком ОТВЕТ ДАЙТЕ СЕГОДНЯ ЭТО СРОЧНО!!!!!!!!!!
- Помогите, пожалуйста! Это все в java
- JAVA, объясните, пожалуйста, простыми словами
- Люди, помогите пожалуйста с программой!!!
Внешний цикл будет: for (int j = 0; j < m - 1; j++), а внутренний for (int i = 0; i < n - 2; j++)? Просто у меня выход за пределы массива.
1101 0110 1101 0110 1100 0101 0110
1110 1001 0110 1011 1010 1111 1010
1000 0101 0011 1110 1011 1110 1010
1011 1101 0101 0001 0101 0011 1011
Каждая последовательность двоичного кода - это ячейка с четырьмя сторонами.
1110 1001 ...
Для такого случая условия внутри циклов будут другими. В каждой ячейке матрицы, полагаю, содержится 4 символа. Тогда для горизонтальных стен:
for (int i = 0; i <= n - 2; i++) {
. .
for (int j = 0; j <= m - 1; j++) {
. .
}
}
Для вертикальных стен:
for (int i = 0; i <= m - 2; i++) {
. .
for (int j = 0; j <= n - 1; j++) {
. .
}
}
Если важны и "внешние стены", то их нужно будет учесть отдельно
Пример для горизонтальных:
for (int i = 0; i < n; i+=2) {
. .
for (int j = 0; j < m; j++) {
/*
тут проверять только второй и четвёртый символ (верхняя и нижняя стена), характеризующий ячейку, также используя 2 логические переменные.
*/
}
}
- если горизонтальные стены, то
if (matrix2[i][j].charAt(1) == '0' && matrix2[i + 1][j].charAt(1) == '1' && . .)
- если вертикальные стены, то
if (matrix2[i][j].charAt(0) == '1' && matrix2[i][j].charAt(2) == '1' && . .)
Ну, и плюс я отдельно учту последнюю строку и столбец. Так?
b1 = true;
if (b0) {
b0 = false;
v += 1;
}
if (matrix2[i][j].charAt(0) == '1' && matrix2[i + 1][j].charAt(0) == '1') {
if (b0 || b1) {
v += 1;
b0 = false;
b1 = false;
}
}
}
}
if (b0 || b1) {
g += 1;
b0 = false;
b1 = false;
}
for (int j = 0; j < m; j++) {
if (matrix2[i][j].charAt(1) == '1' && matrix2[i][j + 1].charAt(1) == '0')
b0 = true;
if (b1) {
b1 = false;
g += 1;
}
b1 = true;
if (b0) {
b0 = false;
g += 1;
}
if (matrix2[i][j].charAt(1) == '1' && matrix2[i][j + 1].charAt(1) == '1') {
if (b0 || b1) {
g += 1;
b0 = false;
b1 = false;
}
}
}
}
System.out.println("Количество вертикальных стен в замке = " + v + ".");
System.out.println("Количество горизонтальных стен в замке = " + g + ".");
}