Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2012, 19:02   #1
dryshok
 
Регистрация: 26.06.2012
Сообщений: 3
Вопрос Двухмерный массив

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

Последний раз редактировалось Stilet; 26.06.2012 в 20:18.
dryshok вне форума Ответить с цитированием
Старый 29.06.2012, 07:57   #2
idec
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 10
По умолчанию

задача то решается так:
строишь матрицу из 0 и 1 (невидимые и видимые соответственно)
и вот к примеру :
0 0 1 0
0 1 1 0
0 1 0 1
1 0 1 0

и поставь наблюдателя слева. т.е он будет видеть через нули.
а если повстречается 1, то за ней он не увидит ничего.
поэтому складываешь 1 и 2 столбцы:
0
1
1
1
как видим в первой строке дырка еще есть
сложим результат с 3м столбцом:
1
1
1
1
дырок нет, следовательно остальные столбцы для наблюдателя не видны:
а именно 4 столбец.

код намного короче получится чем ты запостил
idec вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двухмерный массив на С++ DJ DIMON Помощь студентам 1 26.12.2011 08:11
двухмерный массив tem_80 Общие вопросы C/C++ 4 05.02.2011 13:22
Двухмерный массив. 666Pupsik666 Общие вопросы C/C++ 4 16.01.2011 12:27
С# Двухмерный массив Dron17 Общие вопросы C/C++ 2 12.10.2010 10:58
Двухмерный массив briko Паскаль, Turbo Pascal, PascalABC.NET 6 01.06.2010 09:45