Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева - C (СИ) (149668)
Формулировка задачи:
Поле размером m x n заполнено прозрачными и непрозрачными кубиками. Найдите все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева
Листинг программы
- uses crt;
- var a:array[1..50,1..50] of byte;
- n,m,i,j,l,ks,f,np,k:byte;
- begin
- clrscr;
- randomize;
- writeln('Vvedite razmery polya:');
- write('Stroki m=');readln(m);
- write('Stolbcy n=');readln(n);
- writeln('Pole:');
- for i:=1 to m do
- begin
- for j:=1 to n do
- begin
- a[i,j]:=random(2);{ноли и единицы}
- write(a[i,j]:3);
- end;
- writeln;
- end;
- writeln('Stolbcy po usloviyu:');
- ks:=0;{пока нужных столбцов нет}
- for j:=2 to n do {идем по столбцам нечиная со второго}
- begin
- f:=0;np:=0;{пока невидимых(f)непрозрачных{np}
- for i:=1 to m do {по столбцу вниз}
- if a[i,j]=1 then {если непрозрачный}
- begin
- np:=np+1;{считаем}
- k:=0;{влево пока непрозрачных нет}
- for l:=j-1 downto 1 do{идем влево по строке}
- if a[i,l]=1 then{если попался непрозрачный}
- begin
- k:=1;{фиксируем}
- break;{дальше не проверяем}
- end;
- if k=1 then f:=f+1;{если невидим слева, считаем}
- end;
- if f=np then{если невидимых=непрозрачных, т.е. все непрозрачные невидимы}
- begin
- writeln('Stolbec ',j);{выводим номер столбца}
- ks:=1;{фиксируем что такой столбец есть}
- end;
- end;
- if ks=0 then writeln('Takih stolbcov net!');{если ни одного, сообщаем}
- readln
- end.
Решение задачи: «Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева»
textual
Листинг программы
- for (j = 0; j < n; j++) {
- c = 1;
- for (i = 0; i < m; i++) {
- if (a[i][j] == 1) {
- for (k = (j - 1); k > -2; k--) {
- if (k == -1) {
- c = 0;
- break;
- } else if (a[i][k] == 1) {
- break;
- }
- }
- }
- }
- }
Объяснение кода листинга программы
В данном коде выполняется следующая задача: нужно найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева. Алгоритм решения задачи следующий:
- Перебираем все столбцы поля (переменная j).
- Для каждого столбца находим первый непрозрачный кубик (переменная c).
- Если такой кубик найден, то непрозрачными кубиками в этом столбце являются все кубики, которые находятся выше него (переменная k).
- Перебираем все эти кубики, проверяя, является ли каждый из них непрозрачным.
- Если непрозрачный кубик найден, то он помечается как прозрачный (переменная c = 0) и дальнейший поиск непрозрачных кубиков в этом столбце прекращается.
- После завершения поиска непрозрачных кубиков в каждом столбце, переходим к следующему столбцу. Таким образом, после выполнения данного кода, в переменной c будет содержаться информация о том, является ли каждый кубик поля непрозрачным или прозрачным.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д