Помогите в написании программы на языке с++
Поле размером mxn заполнено прозрачными кубиками. Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева.
> Поле размером mxn заполнено прозрачными кубиками. Найти все столбцы поля, все непрозрачные кубики которых ...
Откуда взялись непрозрачные кубики, если поле заполнено прозрачными?
Да у Вас, батенька, возможно, какое-то расстройство ЦНС, блокирующее рассудочную деятельность, раз вы за полторы недели не смогли просто правильно скопипастить задание, не говоря уже об изучении основ С++. Возможно, стоит обратится к врачу.
Задание тут такое: "Поле размером NxM заполнено прозрачными и непрозрачными кубиками. Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева. "
Возможный вариант выполнения:
#include <algorithm>
#include <iterator>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
srand(time(0));
int n, m;
cout << "размеры поля (n m)? ";
cin >> n >> m;
cout << "\nслучайная расстановка ящиков\n"
"(0 - прозрачный, 1 - непрозрачный): \n\n";
for (int c = 1; c <= m; ++c) cout << setw(3) << c;
cout << endl << setw(3 * m) << setfill('-') << "" << setfill(' ') << endl;
bool **field = new bool *[n];
for (int r = 0; r < n; ++r) {
field[r] = new bool[m];
generate_n(field[r], m, [](){ return rand() % 5 == 0; });
cout << " ";
copy(field[r], field[r] + m, ostream_iterator< bool >(cout, " "));
cout << endl;
}
int *first_opaque = new int[n];
for (int r = 0; r < n; ++r) {
first_opaque[r] = find(field[r], field[r] + m, true) - field[r];
}
cout << "\nискомые столбцы: ";
for (int c = 1; c < m; ++c) {
bool have_opaque = false;
bool all_invisible = true;
for (int r = 0; r < n; ++r) {
if (field[r][c]) {
have_opaque = true;
if (c <= first_opaque[r]) {
all_invisible = false;
break;
}
}
}
if (have_opaque && all_invisible) cout << " " << c + 1;
}
return 0;
}
