Top.Mail.Ru
Ответы

Помогите в написании программы на языке с++

Поле размером mxn заполнено прозрачными кубиками. Найти все столбцы поля, все непрозрачные кубики которых невидимы для наблюдателя, расположенного слева.

По дате
По Рейтингу
Аватар пользователя
Новичок
13лет

> Поле размером 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;
}