IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Массивы, задачка... I need help !
Valkirie
сообщение 17.03.2005 11:12
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Женский

Репутация: -  0  +


Ребята, помогите, плииз.... чё то я не совсем понимаю...что тут к чему... sad.gif

Вводится прямоугольный массив, состоящий из 0 и 1. Можно ли в нем выбрать 2 строки так, чтобы в них каждый столбец содержал хотя бы одну единицу. Динамическими массивами не пользоваться.

Вход
В первой строке входа дано количество строк M и количество столбцов N в массиве. Далее следуют MxN элементов массива в следующем порядке: сначала элементы первой строки, затем элементы второй строки и т.д. (0 либо 1, по одному в каждой строке).

Выход
На выход напечатать yes в случае положительного ответа и no в случае отрицательного.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 13)
hiv
сообщение 17.03.2005 11:26
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Что-то тут условие не полное... Наверно массив состоит из чисел содержащих цифры 0 и 1.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.03.2005 11:32
Сообщение #3


Гость






Цитата(Valkirie @ 17.03.05 10:12)
Динамическими массивами не пользоваться.

Условие совершенно излишнее... Во-первых, в TP просто нет динамических массивов, ну а во-вторых, здесь ВООБЩЕ никакие массивы не нужны. Все, что нужно - прочесть 2 значения (M и N), и сделать 2 вложенных цикла (проверяя, есть ли в M-ой "строке" хотя бы одна единица. Если есть - то увеличить счетчик). Ну а потом - просто проверить, содержится ли в счетчике число >= 2 ...
 К началу страницы 
+ Ответить 
hiv
сообщение 17.03.2005 12:29
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Volvo, прочти еще раз что было написано:
Цитата
чтобы в них каждый столбец содержал хотя бы одну единицу

я так это понял - что в каждом элементе строки массива должна быть минимум одна еденица.


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.03.2005 12:47
Сообщение #5


Гость






blink.gif Очень интересно... Задачка стоит в теме "Двумерные массивы", но динамическими массивами не пользоваться ...
Задача 8018
 К началу страницы 
+ Ответить 
Valkirie
сообщение 17.03.2005 15:41
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Женский

Репутация: -  0  +


Угу..вот такой вот попандос....
ладно, спасибо ребят..
попробую что-нить сделать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.03.2005 16:42
Сообщение #7


Гость






Valkirie, ну нельзя динамическими, пользуйся статическим... Например, объяви массив мз 100 LongInt-ов (назовем его Arr) и считай каждую "строку" матрицы двоичным представлением числа. Загоняешь эти самые "строки" в массив LongInt-ов и потом перебором:
Код
if (Arr[i] or Arr[j]) = ($FFFFFFFF shr (32-N)) then { такая пара "строк" содержит 1-цы в каждом столбце }


Естественно, это накладывает ограничения на число столбцов матрицы: оно не должно быть больше 32.
 К началу страницы 
+ Ответить 
Valkirie
сообщение 17.03.2005 20:41
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Женский

Репутация: -  0  +


:p2: чего-то у меня с головой наверное не то...
т.е. если массив прямоугольный - то он многомерный...или нет...
мне его как объявлять...?
так ?
Код
const maxN=32;
 maxM=32;
var Arr:array [1..maxM] of array [1..maxN] of integer;


но тогда с условием лажа получается...

блин этот универ, вечно нифига не объяснят - и решайте... <_<
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 17.03.2005 20:46
Сообщение #9


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Объявление двумерного массива (прямоугольной матрицы)

Код

const n=5;
       m=4;
var
x:array[1..n,1..m] of integer;


Сообщение отредактировано: klem4 - 17.03.2005 20:54


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.03.2005 20:50
Сообщение #10


Гость






Ну зачем же так круто? Оба измерения - не надо smile.gif
Достаточно одного... Смотри:
Код
Const maxN = 32;
Var Arr: array[1 .. 100] of LongInt;
begin
 { Читаем M, N }
 for i := 1 to m do
   for j := 1 to n do
     begin
       readln(x); { Читаем очередное число }
       if x = 1 then Arr[i] := Arr[i] or $1;
       Arr[i] := Arr[i] shl 1
     end;
 { Заполнила массив чисел, теперь - перебором их... }
end.
 К началу страницы 
+ Ответить 
Valkirie
сообщение 17.03.2005 20:54
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Женский

Репутация: -  0  +


Код
const maxN=32;
 maxM=32;
var Arr:array [1..maxM, 1..maxN] of integer;
N, M, i, j: integer;
begin
Write('');
ReadLn(M,N);
for i:=1 to M do
for j:=1 to N do
begin
Write('');
ReadLn(Arr[i,j]);
end;
if (Arr[i,j] or Arr[j,i]) = ($FFFFFFFF shr (32-N)) then
begin
WriteLn('yes');
ReadLn;
end
else
WriteLn('no');
ReadLn

end.


я наверное дура полная...
Так прога работает...и всё правильно выдаёт...
А этот сервер пишет - что всё не правильно...

volvo, сщас буду пробовать воспользоваться твоим последним советом...
Пасиб :p2:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 17.03.2005 20:56
Сообщение #12


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


мне кажется это
Код
if (Arr[i,j] or Arr[j,i]) = ($FFFFFFFF shr (32-N)) then

должно быть в цикле...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Valkirie
сообщение 17.03.2005 21:03
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Женский

Репутация: -  0  +


Если бы я ещё понимала, чего от меня хотят.... было-бы вообще хорошо...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.03.2005 21:22
Сообщение #14


Гость






Цитата
Если бы я ещё понимала, чего от меня хотят...

Допустим, у тебя есть матрица:
0 0 0 1 1 0
0 1 1 1 1 0
1 1 1 1 0 0
Это должно выдать "нет" потому что нет в 6-ой позиции единицы нигде...
В общем случае - надо как бы "складывать" строки: "0" + "0" = "0", все остальные комбинации = "1", и смотреть, есть ли 2 строки, при "сложении" которых получаются ВСЕ единицы...

Добавлено позже:
Я вот тут подумал, а нужно ли заморачиваться с LongInt-ами? Можно ведь сделать еще проще (тут число столбцов ограничено не 32, как с LongInt-ами, а 255):
Код
Type TSet = Set Of Byte;
Var
 Arr: array[1 .. 100] of TSet;
 i, j, m, n, x: integer;
begin
{ Читаем M, N }
for i := 1 to m do
  begin
    Arr[i] := [];
    for j := 1 to n do
      begin
        readln(x); { Читаем очередное число }

        { в список заносим только столбцы содержащие 1-цы }
        if x = 1 then Arr[i] := Arr[i] + [j];
      end;
  end;
{ Заполнила массив множеств, теперь - перебор... }
for i := 1 to m-1 do
  for j := i+1 to m do
    { проверка, все ли столбцы находятся в объединенном списке строк i и j? }
    if Arr[i] + Arr[j] = [1 .. n] then
      writeln('строки ', i, ' и ', j, 'содержат 1-цы во всех столбцах')
end.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 3:05
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"