Форум: "Потрепаться";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
ВнизПятница. Большая пачка сложных задачек... Найти похожие ветки
← →
MBo © (2004-07-23 09:59) [0]1. 100 человек стоят у трапа самолета, у всех есть билеты, в самолете как раз
100 мест. Вдруг с места срывается сумашедшая старуха и занимает первое попавшееся
место. Дальше все идут по-очереди. Так как они нормальные люди, каждый сначала
пытается занять сво± место по билету. Ну а если оно занято, то какое попало.
Какова вероятность того, что последний пассажир сядет на свое место?
2. - Я слышу, что в саду играют дети, - сказал Иванов. - Неужели все они ваши?
- Боже упаси, конечно, нет, - воскликнул профессор Интегралов, известный специалист по теории чисел. - Там, кроме моих детей, играют еще дети троих соседей, но наша семья самая большая.
У Лавочкиных детей меньше, чем у меня, а у Скамейкиных - еще меньше, а меньше всего детей у Табуреткиных.
- А сколько всего детей? - спросил Иванов.
- На этот вопрос я так отвечу, - сказал Интегралов. - Детей меньше восемнадцати, а если перемножить между собой число детей в семьях, то получится номер моего дома, который вы видели, когда пришли.
Иванов достал из кармана блокнот и карандаш и принялся за вычисления. Через некоторое время он поднял голову и сказал:
- Нужна еще какая-то информация. У Табуреткиных больше одного ребенка?
Как только Интегралов ответил, Иванов сразу нашел решение и правильно назвал число детей в каждой семье.
Иванов получил подсказку, после которой задача стала легкой.
Но оказывается, что число детей в каждой семье можно определить и без этой дополнительной информации, что дал профессор Интегралов (сообщив о том, сколько детей у Табуреткиных - один или больше).
Как это сделать, опираясь на рассуждения Иванова?
3. Можно ли на обыкновенной бумаге в клетку нарисовать выпуклый пятиугольник так, чтобы все его вершины были в узлах, и больше ни одного узла ему не принадлежало?
4. В памяти суперкомпьютера находится заполненная некоторым образом матрица А[M,N] (M и N очень большие числа). Каждая клетка матрицы может иметь значение 0 или 1.
Необходимо придумать алгоритм для преобразования матрицы следующим образом:
- Элемент в новой матрице A[i,j]=1, если в изначальной матрице в сторке i есть хоть один элемент =1 И в столбце j есть хоть один элемент =1.
- Иначе элемент в новой матрице A[i,j]=0.
Ограничение: в памяти нет места для временного размещения еще одной такой матрицы, так как первая занимает 90% всей памяти компьютера.
5. Ниже приведён список из 10 утверждений,
позволяющий однозначно определить натуральное число N.
К сожалению, некоторые из этих утверждений неверны
Но зато все остальные верны
1. По крайней мере одно из двух последних утверждений в списке верно.
2. Это или первое верное или первое неверное утверждение в списке.
3. В списке есть 3 последовательных неверных утверждения.
4. Разность между номерами последнего и первого верных утверждений есть делитель N.
5. N равно сумме номеров всех верных утверждений.
6. Это не есть последнее_верное_утверждение.
7. Номера всех верных утверждений есть делители N.
8. N% всех утверждений верны.
9. Число делителей N, отличных от 1 и N, больше суммы номеров верных утверждений.
10.В списке нет 3-х последовательных верных утверждений.
6. Едем в автобусе, окна замёрзшие. Как подручными средствами (ничего необычного, только,
скажем, пластмассовая линейка) более-менее точно измерить толщину льда на стекле?
7. Что больше |Sin(2001^2002)| или 0.5?
8. Все знают классическую задачу о бассейне - в трубу А втекает, из трубы Б вытекает.
Теперь давайте перейдем к практике. Известно, что скорость вытекания подчиняется закону Бернулли v~sqrt(плотность*g*h).
Ну а теперь сама задача.
Вы на даче расположили переносной (надувной) бассейн. Входное и выходное отверстия на уровне земли.
Бассейн заполняется с постоянной скоростью за время t1. Время слива самотеком t2. Определить время заполнения при незакрытом сливном отверстии. Считать, что бассейн имеет постоянную по высоте площадь сечения.
9. Задача Архимеда: Два цилиндра диаметром 1 пересекаются крестом под прямым углом. Каков объём общей части?
← →
MBo © (2004-07-23 10:00) [1]10. Животный ряд:
Собака - 3
Корова - 2
Кошка - 3
Петух - 8
Ворона - ?
11. 1) Укажите 1000 идущих подряд натуральных чисел, ни одно из которых не является простым.
2) То же самое, но с дополнительным требованием, чтобы числа непосредственно слева и справа от этого интервала были простыми.
12. Один ёжик (ежиха) бежит с постоянной скоростью по прямой. Когда расстояние до нее становится минимальным, в погоню за ней устремляется ёжик, который бежит с той же скоростью и все время держит курс на неё.
Во сколько раз он сможет сократить расстояние до неё?
13. Трактор тянет за собой бревно (вдоль).
Я хочу его измерить шагами.
Шёл за трактором - насчитал 6 шагов.
В противоположную сторону - 2 шага.
Сколько на самом деле шагов в бревне?
PS
Легко написать систему с суммой и разностью скоростей.
Фишка в том, чтобы найти простое, устное решение.
14. Мои акции 100 дней росли на 1% ежедневно.
А потом стал падать тоже на 1% ежедневно.
Через сколько дней падения я вернусь (почти точно) на прежний уровень?
Токо умоляю, не запускайте калькулятор!
Лучше воспользуйтесь тем, что скорость мала.
15. Белоснежка наливает гномам молока - всем по-разному. После этого происходит следующая забавная процедура: старший гном делит всё своё молоко поровну между 6 другими братьями, потом следующий гном делит всё своё молоко (включая долитое) между 6 другими братьями (включая старшего), и так далее все гномы. После этого у каждого оказывается ровно столько молока, сколько было вначале. По сколько (граммов) разлила Белоснежка каждому?
16. Ваш друг загадал полином с целыми неотрицательными коэффициентами и готов сообщить вам
значения этого полинома сначала в одной, а потом в другой из выбранных вами целочисленных
точек ( вторую из точек можно выбрать после того, как друг выдаст значение полинома в первой точке).
Сможете ли вы отгадать загаданный полином?
17. Иван Царевич шел за украденной Кощеем Василисой Прекрасной и наткнулся на избушку Бабы Яги. Баба Яга его накормила, а потом и говорит:
- Не то нынче время пошло. Кощей уж больно хитер стал. Теперь он усложнил охрану своей иголки жизни. Теперь на высоком дубу на цепях в сундуке, где раньше сидел только один заяц, сегодня сидят целых три – черный, белый и серый. И в каждом зайце по утке (серая шейка, ощипанная утка и утка хромоножка), а в каждой утке по яйцу (обычное яйцо, тухлое яйцо и крашеное яйцо), а в каждом яйце по иголке (обычная иголка, цыганская иголка и кощеева игла). И в каждом своя игла, яйцо и утка сидит. И только одна игла настоящая (кощеева) и несет смерть ему. И беда то в том, что если схватить одного зайца, открыв сундук, то два других убегут. Поэтому надо точно знать какого зайца хватать, в котором та самая утка, в которой то самое яйцо, в котором та самая игла. А известно очень мало:
- Настоящей иголки кощея нет в утке хромоножке и нет в обычном яйце.
- Крашеного яйца нет в утке серой шейке.
- Тухлое яйцо находится в черном зайце.
- Цыганская игла в тухлом яйце.
- А в белом зайце сидит либо утка серая шейка, либо утка хромоножка.
Иван царевич был не дурак и сказал, что завтра по утру без труда схватит нужного зайца.
В каком зайце сидит какая утка, в которой какое яйцо, где лежит кощеева игла? И как Иван Царевич это определил?
18. Какова вероятность, что два наугад выбранных натуральных числа будут взаимно простыми, т.е. без общих делителей?
← →
MBo © (2004-07-23 10:16) [2]Пардон, забыл указать, что в задаче
>7. Что больше |Sin(2001^2002)| или 0.5?
аргумент в ГРАДУСАХ
← →
Sandman25 © (2004-07-23 10:18) [3]4. Объявляем вектора B[M] и С[N]. Они занимают меньше 10%, если M,N > 9.
Записываем в B[I] 1, если в I-той строке есть 1.
Записываем в C[J] 1, если в J-том столбце есть 1.
Пробегаемся по A: A[I, J] = B[I] and C[J]
← →
Alx2 © (2004-07-23 10:23) [4]7. sin больше :)))
← →
MBo © (2004-07-23 10:25) [5]>Sandman25 © (23.07.04 10:18) [3]
ЗдОрово!
Задача, говорят, с интервью Microsoft.
← →
Sandman25 © (2004-07-23 10:25) [6]7. Получается примерно sin (10г), то есть sin меньше.
← →
MBo © (2004-07-23 10:27) [7]>sin (10г),
где-то ты ошибся
← →
Sandman25 © (2004-07-23 10:28) [8][5] MBo © (23.07.04 10:25)
:)
Сначала пытался найти решение без использования массивов, только со скалярами. ИМХО это невозможно, если в массивы нельзя записывать ничего, кроме 0 и 1.
← →
jack128 © (2004-07-23 10:37) [9]1) Если не особо заморачиваться, то 99%
← →
Думкин © (2004-07-23 10:39) [10]> [9] jack128 © (23.07.04 10:37)
1/2
← →
jack128 © (2004-07-23 10:41) [11]
> 9] jack128 © (23.07.04 10:37)
да, ступил..
← →
Sandman25 © (2004-07-23 10:46) [12]7. 2001^2002=(N+X)*180, N целое, 0<=X<1
2002lg2001=lg180+lg(N+X)
lg(N+X)=6606,8413989445919237284910658068
lg(K+X)=0,8413989445919237284910658068
K+X=6,9406308230315654834043075240474
X=0,9406308230315654834043075240474
|sin(2001^2002)|=|sin(0,9406308230315654834043075240474*180)|=0,18543426182122394696410154707374 < 0.5
← →
Sandman25 © (2004-07-23 10:50) [13][12] Sandman25 © (23.07.04 10:46)
Опять ступил :(
← →
MBo © (2004-07-23 10:54) [14]>Sandman25 © (23.07.04 10:28) [8]
>Сначала пытался найти решение без использования массивов, только со скалярами.
Видел псевдокод без использования доп. массивов, но еще не разбирался. Ближе к вечеру посмотрю.
← →
Sandman25 © (2004-07-23 11:08) [15]10. Ворона - 5?
← →
MBo © (2004-07-23 11:11) [16]>10. Ворона - 5?
нет
← →
mrcat © (2004-07-23 11:15) [17]10. 14 ?
← →
MBo © (2004-07-23 11:18) [18]>10. 14 ?
Нет
← →
mrcat © (2004-07-23 11:24) [19]10. 14 ?
5 + 8 = 13 :)
← →
Sandman25 © (2004-07-23 11:29) [20]16. Задача непонятна. Друг сообщил еще и степень полинома? Иначе найдем линейную функцию :)
← →
Fishka (2004-07-23 11:36) [21]10. 13
← →
DimKa © (2004-07-23 11:56) [22]2. А номер дома не указан?
← →
MBo © (2004-07-23 12:04) [23]>5 + 8 = 13 :)
Нет.
Задачу часто легко решают дети, в отличие от взрослых.
>Sandman25 © (23.07.04 11:29) [20]
>16. Задача непонятна. Друг сообщил еще и степень полинома? Иначе найдем линейную функцию :)
Нет, степень полинома неизвестна.
>DimKa © (23.07.04 11:56) [22]
>2. А номер дома не указан?
Не указан, но нам известно, что Иванов его знает.
← →
Думкин © (2004-07-23 12:06) [24]10. 3
← →
DimKa © (2004-07-23 12:11) [25]14. 99 дней
← →
Sandman25 © (2004-07-23 12:25) [26]16.
F(X)=a1*X^^n+a2*X^^(n-1)...+a(n-1)
Пусть я скажу точку 1, мне скажут Y1=a1+a2+...+a(n-1).
Потом я скажу точку 2, мне скажут Y2.
Тогда степень полинома <= [log2(Y2-Y1)].
Имеем Y2=F(X2)=2^^n*a1+2^^(n-1)*a2+..+a(n-1).
Y2-Y1=a1(2^^(n-1))+a2(2^^(n-2))...
Остается перевести число Y2-Y1 в двоичную систему и решить систему уравнений.
Например, если Y1=5, Y2=15, то
N <= 3
10=8+2
a1+a2+a3=5
4a1+2a2+a3=15
Вычитаем уравнения
3a1+a2=10
a1=3
a2=1
F(X)=3x^^2+x+1
← →
Sandman25 © (2004-07-23 12:28) [27]"Остается перевести число Y2-Y1 в двоичную систему"
и
"10=8+2" в решении не принимают участия, ошибся
← →
Думкин © (2004-07-23 12:33) [28]> [26] Sandman25 © (23.07.04 12:25)
> 16.
> F(X)=a1*X^^n+a2*X^^(n-1)...+a(n-1)
у = 10*x-5
y(1) = 5
y(2) = 15
← →
Sandman25 © (2004-07-23 12:37) [29][28] Думкин © (23.07.04 12:33)
Понятно. Такое ощущение, что X должны быть простыми и как можно больше :)
Например, X1=103. получаем Y=120022. Тогда X2=101^^3
← →
Agent13 © (2004-07-23 12:54) [30]5. 420. Многовато что-то, но вроде подходит.
← →
DimKa © (2004-07-23 12:58) [31]15. последнему гному вообще не налилили?
Если это так, то я на првильном пути, если нет, ну ее задачу эту )
← →
MBo © (2004-07-23 13:00) [32]>Думкин © (23.07.04 12:06) [24]
10. 3
да
>DimKa © (23.07.04 12:11) [25]
14. 99 дней
Да
← →
MBo © (2004-07-23 13:15) [33]>DimKa © (23.07.04 12:58) [31]
Правильным путем идете, товарищ! ;)
>Agent13 © (23.07.04 12:54) [30]
5. 420. Многовато что-то, но вроде подходит.
Верно!
>Sandman25 © (23.07.04 12:25) [26]
Кое-что верно (сначала P(1) спрашиваем), и ключевая идея близко
← →
Думкин © (2004-07-23 13:28) [34]16. Да ключевая фраза - неотрицательные. Поэтому мой пример отпадает.
P(1) - оценка, потом любое простоте болше ответа - и далее ясно.
← →
MBo © (2004-07-23 13:31) [35]>Думкин © (23.07.04 13:28) [34]
простое - не обязательно
← →
Думкин © (2004-07-23 13:36) [36]> [35] MBo © (23.07.04 13:31)
Верно. :-)
← →
default © (2004-07-23 13:41) [37]MBo © (23.07.04 10:54) [14]
можно без массивов сделать создать теже массивы что и у Sandman25
но записать их в верхнюю строку матрицы и левый столбец
по ним заполнить "внутреннюю матрицу"
но при записи строк будет перекрытие элемента (1, 1)
надо это учесть сохранив нужные(ое) значения(ие) при "конечном" заполнении левого столбца и верхней строки
← →
default © (2004-07-23 13:47) [38]"но при записи строк будет перекрытие элемента (1, 1)"-->
но при записи верхней строки и левого столбца будет перекрытие элемента (1, 1)
← →
DimKa © (2004-07-23 14:05) [39]11. А такое вообще возможно?
← →
Sandman25 © (2004-07-23 14:10) [40]Думкин, MBo
Растолкуйте, пожалуйста, принцип отображения в 10 задаче...
← →
ИдиотЪ (2004-07-23 14:10) [41]1. 1/100
← →
MBo © (2004-07-23 14:18) [42]>Sandman25 © (23.07.04 14:10) [40]
>Растолкуйте, пожалуйста, принцип отображения в 10 задаче...
собака - гав
>DimKa © (23.07.04 14:05) [39]
>11. А такое вообще возможно?
11.1 - возможно
11.2 - под вопросом
← →
Sandman25 © (2004-07-23 14:22) [43][42] MBo © (23.07.04 14:18)
Lol :)
А я то уже почти нашел последовательность...
Собака - сумма порядковых номеров букв в русском алфавите mod 16 = 3
Кошка - 3
Корова - 2
Петух - 7 (вместо 8).
← →
default © (2004-07-23 14:22) [44]MBo © (23.07.04 14:18) [42]
вороно кар - 3 буквы)
← →
Sandman25 © (2004-07-23 14:24) [45]11.
1) 1000!+N, 1<N<1000
2) написал программу, запустил, за полтора часа дошла до 2 миллиардов, ответа все еще не было, остановил.
← →
DimKa © (2004-07-23 14:26) [46]
> 11.1) 1000!+N, 1<N<1000
Ужас )
← →
Sandman25 © (2004-07-23 14:30) [47]Точнее,
1001!+N, 1<N<1001
← →
Sandman25 © (2004-07-23 14:30) [48]или еще точнее
1001!+N, 1<N<=1001
← →
MBo © (2004-07-23 14:37) [49]>Sandman25 © (23.07.04 14:24) [45]
11.2) написал программу, запустил, за полтора часа дошла до 2 миллиардов, ответа все еще не было, остановил.
;)
Есть очень простое соображение, которое сразу дает ответ - возможно ли.
← →
Agent13 © (2004-07-23 14:37) [50]
> 2) написал программу, запустил, за полтора часа дошла до
> 2 миллиардов, ответа все еще не было, остановил.
LOL. Терпеливый :) Я сделал тоже самое, меня хватило на 15 минут...
← →
Sandman25 © (2004-07-23 14:40) [51][49] MBo © (23.07.04 14:37)
Понятно. Буду думать о числе 1000 :)
[50] Agent13 © (23.07.04 14:37)
Я на обед уходил :)
← →
Sandman25 © (2004-07-23 14:43) [52]11.
2)
Разница между простыми числами всегда четная.
А в нашем случае она получается 1001.
Самое смешное, что я по этому признаку еще в самом начале проверял, но почему-то посчитал, что разница 1000 :)
← →
default © (2004-07-23 14:59) [53]17.
заяц: серый
утка: ощипанная
яйцо: крашеное
иголка(по условию): кощеева
в решении есть два варианта, но в обоих из них нужное лежит в сером зайце
← →
Agent13 © (2004-07-23 15:00) [54]17.
Заяц - белый, серый, чёрный.
Утка - ?, ощипанная, ?.
Яйцо - обычное, крашеное, тухлое.
Игла - обычная, КОЩЕЕВА, цыганская.
← →
Agent13 © (2004-07-23 15:03) [55]Блин и как всегда меня опередили
← →
default © (2004-07-23 15:04) [56]Agent13 © (23.07.04 15:00) [54]
а ведь надо было таблицу написать, да одна фигня...
← →
Dmitriy O. © (2004-07-23 15:20) [57]1 1/100
← →
clickmaker © (2004-07-23 15:35) [58]
> 6. Едем в автобусе, окна замёрзшие. Как подручными средствами
> (ничего необычного, только,
> скажем, пластмассовая линейка) более-менее точно измерить
> толщину льда на стекле?
1.Приложить линейку к кромке окна, запомнить размер от поверхности до края рамы
2.Растопить пальцем лед у кромки окна, приложить линейку, запомнить размер
3.Толщина льда = 2-1
← →
MBo © (2004-07-23 15:39) [59]>clickmaker © (23.07.04 15:35) [58]
А если толщина льда порядка 1 мм, а измерить хочется с точностью 0.1 мм ?
← →
Agent13 © (2004-07-23 15:45) [60]18. ~0,608
← →
clickmaker © (2004-07-23 15:53) [61]
> MBo © (23.07.04 15:39) [59]
> >clickmaker © (23.07.04 15:35) [58]
> А если толщина льда порядка 1 мм, а измерить хочется с точностью
> 0.1 мм ?
А какая цена деления у линейки ? :)
← →
Sandman25 © (2004-07-23 15:56) [62][61] clickmaker © (23.07.04 15:53)
Соскабливаем лед с 10 разных окон и кладем стопкой :)
← →
clickmaker © (2004-07-23 15:58) [63]
> Sandman25 © (23.07.04 15:56) [62]
> [61] clickmaker © (23.07.04 15:53)
>
> Соскабливаем лед с 10 разных окон и кладем стопкой :)
Под недоумевающими взглядами обалдевших пассажиров :) Особенно в час пик можно так приколоться попробовать...
← →
MBo © (2004-07-23 15:59) [64]>clickmaker © (23.07.04 15:53) [61]
Цена деления 1 мм.
З.Ы.
Отсутствие необычных предметов не отрицает наличия обычных ;)
>Agent13 © (23.07.04 15:45) [60]
>18. ~0,608
Численно - примерно так. А алгебраическая формула получилась?
← →
clickmaker © (2004-07-23 16:18) [65]
> MBo © (23.07.04 15:59) [64]
> >clickmaker © (23.07.04 15:53) [61]
> Цена деления 1 мм.
> З.Ы.
> Отсутствие необычных предметов не отрицает наличия обычных
> ;)
Хм... Я бы склонился тогда к варианту Sandman25 © (23.07.04 15:56) [62], если бы был уверен, что можно запросто соскоблить пласт льда с окна, пользуясь только обычными предметами
← →
Sandman25 © (2004-07-23 16:23) [66][65] clickmaker © (23.07.04 16:18)
Лучше не так. Снимаем 10 окон, соскабливаем лед с наружней стороны, кладем их очищенными сторонами друг к другу (по очереди), чтобы избежать зазоров, измеряем суммарную высоту :)
← →
Agent13 © (2004-07-23 16:25) [67]
> Численно - примерно так. А алгебраическая формула получилась?
Считано на Делфи по следующему алгоритму:P := 1;
for I := 2 to <сколько не жалко> do
if IsPrime(I) then P := P - P*1/SQR(I);
где IsPrime - проверка, является ли число простым.
В нормальном алгебраическом виде я такое записывать не умею.
← →
clickmaker © (2004-07-23 16:27) [68]
> 13. Трактор тянет за собой бревно (вдоль).
> Я хочу его измерить шагами.
> Шёл за трактором - насчитал 6 шагов.
> В противоположную сторону - 2 шага.
> Сколько на самом деле шагов в бревне?
Ну если рассуждать так, что Длина бревна - Путь трактора = 2, а Длина бревна + Путь трактора = 6, то получится 4
← →
Sandman25 © (2004-07-23 16:33) [69][67] Agent13 © (23.07.04 16:25)
Подозреваю, что придем к золотому сечению.
Только непонятно, почему.
← →
Sha © (2004-07-23 16:39) [70]MBo © (23.07.04 15:59) [64]
Нагретая линейка прикладывается к стеклу и краю окна под углом.
Она протапливает лед, после чего решаем подобные треугольники.
← →
MBo © (2004-07-23 16:42) [71]>Agent13 © (23.07.04 16:25) [67]
>Sandman25 © (23.07.04 16:33) [69]
Нет, это не золотое сечение (fi=0.618...)
Выкладки весьма непростые, получается предел суммы некоего довольно известного ряда.
>clickmaker © (23.07.04 16:27) [68]
нет
← →
Sha © (2004-07-23 16:44) [72]18. Как наугад выбрать натуральное число?
← →
clickmaker © (2004-07-23 16:47) [73]
> Sandman25 © (23.07.04 16:23) [66]
> Лучше не так. Снимаем 10 окон, соскабливаем лед с наружней
> стороны, кладем их очищенными сторонами друг к другу (по
> очереди), чтобы избежать зазоров, измеряем суммарную высоту
> :)
Причем, все это надо проделать, не останавливая автобус, и чтоб водила ничего не просек :)
← →
MBo © (2004-07-23 16:47) [74]>Sha © (23.07.04 16:39) [70]
ОК, можно так, но есть более точный способ - используется предмет, который обычно есть у каждого (едущего в автобусе)
← →
Sha © (2004-07-23 16:48) [75]Монета?
← →
Sandman25 © (2004-07-23 16:53) [76][71] MBo © (23.07.04 16:42)
Я понимаю. Я построил выражения для первых трех пассажиров, но затем потонул в глубине собственных рассуждений :)
← →
MBo © (2004-07-23 16:58) [77]>Sha © (23.07.04 16:48) [75]
Да. Ширина процарапанной (движением поперек плоскости монеты) полоски - хорда длиной d, приближенно h=d^2/8R
← →
Sha © (2004-07-23 16:59) [78]#13
6 шагов туда, 6 шагов обратно, всего 12.
При этом мимо меня проедет 1+3=4 бревна.
Столько бревен мимо меня могли проехать,
если бы я все это время стоял на месте.
Длина бревна = 12 / 4 = 3 шага.
← →
MBo © (2004-07-23 17:04) [79]>Sha © (23.07.04 16:59) [78]
#13 3 шага.
Верно.
или так - человек сделал 8 шагов, пока трактор проехал 4, скорость отличается в два раза, так что 6 шагов вдоль движ. - 3 шага вдоль стоячего.
← →
Sha © (2004-07-23 17:07) [80]Все-таки, как наугад выбрать натуральное число?
Необходимо знать распределение, а оно не задано.
← →
Sandman25 © (2004-07-23 17:10) [81][80] Sha © (23.07.04 17:07)
От 2 до N, N->oo
← →
Sha © (2004-07-23 17:11) [82]Sandman25 © (23.07.04 17:10) [81]
Не понял. Я про распределение вероятности случайного выбора.
← →
Sandman25 © (2004-07-23 17:12) [83]Равномерное от 2 до N, N стремится к бесконечности
← →
Sha © (2004-07-23 17:15) [84]Как тебе удалось прочитать это между строк? :)
← →
MBo © (2004-07-23 17:16) [85]>Sha © (23.07.04 17:07) [80]
Это вопрос сложный. Распределение, если о нем можно тут говорить - равномерное.
предварительный анализ - пусть случайно выбраны числа M и N.
Вероятность, что M делится на простое p = 1/p. Для N - то же самое. Поскольку M и N выбраны независимо, вероятность, что они оба делятся на p = 1/p^2, а что оба не делятся 1-1/p^2.
Для всего множества простых чисел получается
Пi(1-1/P(i)^2)=(1-1/2^2)(1-1/3^2)....
← →
Sandman25 © (2004-07-23 17:18) [86]N=4, p=2/3
N=5, p=5/6
N=6, p=6/10
N=?, p=?
Получается, в знаменателе N*(N-1)/2,
в числителе реккурентная формула...
← →
Sha © (2004-07-23 17:42) [87]Про матрицу. Или я чего-то не понял, или проходит простое решение в лоб:
a[i,j]:=a[i,1] or a[i,2] or ... a[i,n]
or a[1,j] or a[2,j] or ... a[m,j];
← →
Sandman25 © (2004-07-23 17:44) [88][87] Sha © (23.07.04 17:42)
Только что измененный с 0 на 1 элемент будет учитываться как 1 для расчета соседних элементов.
← →
Sha © (2004-07-23 17:46) [89]А, понятно, тогда, похоже, не обойтись боз временных векторов.
← →
Sandman25 © (2004-07-23 17:48) [90][89] Sha © (23.07.04 17:46)
В принципе, можно попробовать задействовать рекурсию, тогда получится без временных векторов. Обход матрицы в ширину :)
← →
Sha © (2004-07-23 17:49) [91]Хотя, черт его знает. Завтра подумаю, если время будет.
← →
Sandman25 © (2004-07-23 17:51) [92]Только ведь все равно при подсчете последнего элемента придется "помнить" первоначыальные значения всех использующихся для его расчетов элементов. А уж где они храниться будут - в векторе или стеке, не суть важно.
← →
Sha © (2004-07-23 17:52) [93]Не совсем понял, хотя возможно мы думаем в одном направлении :)
← →
Sandman25 © (2004-07-23 17:54) [94]:)
← →
ИдиотЪ (2004-07-23 17:56) [95]18.
Пусть чисел всего n, возьмем одно простое S(<n), тогда он может иметь делители только с числами i*S, где i=2..m, m - целое деление n на S
Имеем:
вероятность, что встретился с непростым P=(1-m/(n)), n->бескон,
получится ли нормальная вероятность в пределе ?
по-моему, нет предела
← →
Sha © (2004-07-23 17:58) [96]Sandman25 © (23.07.04 17:54) [94]
еще идея, и без рекурсииa|b=~((~a)&(~b))
← →
Sandman25 © (2004-07-23 17:58) [97][95] ИдиотЪ (23.07.04 17:56)
Вероятность взять число m равна 1/n -> 0
← →
Sandman25 © (2004-07-23 18:00) [98][96] Sha © (23.07.04 17:58)
Только учти, что N и M могут быть неизвестны на этапе компиляции. Развернуть цикл в последовательность операторов не получится. Если я правильно понял твою идею...
все, до понедельника :)
← →
Sha © (2004-07-23 18:02) [99]Sandman25 © (23.07.04 18:00) [98]
Никто развораивать не собирается.
Тот же цикл в лоб с заменой or на and, только инверсия до и после.
← →
ИдиотЪ (2004-07-23 18:03) [100]Sandman25 ©
я неправильно написал
вероятность встретиться не с тем, кто делится на него
и вроде есть предел, единице равен
← →
Sha © (2004-07-23 18:04) [101]тоже ухожу.
← →
ИдиотЪ (2004-07-23 18:06) [102]вероятность равна P=1-1/S
так что на примере простых видно, как различаются вероятности
← →
SergP © (2004-07-23 18:36) [103]
> Sha © (23.07.04 17:42) [87]
> Про матрицу. Или я чего-то не понял, или проходит простое
> решение в лоб:
>
> a[i,j]:=a[i,1] or a[i,2] or ... a[i,n]
> or a[1,j] or a[2,j] or ... a[m,j];
> Sandman25 © (23.07.04 17:44) [88]
> [87] Sha © (23.07.04 17:42)
>
> Только что измененный с 0 на 1 элемент будет учитываться
> как 1 для расчета соседних элементов.
Но на конечный результат это не повлияет. Так что можно и так...
← →
SergP © (2004-07-23 18:42) [104]А можно делать не совсем векторы, а 2 одномерных массива элементами которых будут номера столбцов и строк исходного массива где встречается 1. А потом заполнить единицами все возможные координаты которые можно получить из наших двух массивов.
По крайней мере будет работать быстрее чем вариант с векторами...
← →
default © (2004-07-23 19:03) [105]4.
а чем Вам [37] + [38] не нравится?без всяких векторов...
← →
SergP © (2004-07-23 19:08) [106]
> default © (23.07.04 13:41) [37]
> MBo © (23.07.04 10:54) [14]
> можно без массивов сделать создать теже массивы что и у
> Sandman25
> но записать их в верхнюю строку матрицы и левый столбец
> по ним заполнить "внутреннюю матрицу"
> но при записи строк будет перекрытие элемента (1, 1)
> надо это учесть сохранив нужные(ое) значения(ие) при "конечном"
> заполнении левого столбца и верхней строки
>
>
> default © (23.07.04 13:47) [38]
> "но при записи строк будет перекрытие элемента (1, 1)"-->
> но при записи верхней строки и левого столбца будет перекрытие
> элемента (1, 1)
Лучше находим первый попавшийся элемент равный единице и его строку и столбец используем как эти самые векторы. получится что инфа полученая в этих "векторах" не испортит нам итоговые данные, так как будет такой-же самой...
← →
default © (2004-07-23 19:27) [107]SergP © (23.07.04 19:08) [106]
покажи код(
← →
default © (2004-07-23 19:55) [108]var
M: Array[1..N, 1..M] of Boolean;
Col: Boolean;
i, j: Cardinal;
begin
// ...
for i := 1 to N do
if M[i,1] then begin
Col := True;
Break
end;
for j := 2 to M do
if M[1,j] then begin
M[1,1] := True;
Break
end;
for i := 2 to N do
for j := 2 to M do
if M[i,j] then begin
M[i,1] := True;
M[1,j] := True;
Break
end;
for i := 2 to N do
for j := 2 to M do
M[i,j] := M[i,1] and M[1,j];
for j := 2 to N do M[1,j] := M[1,j] and M[1,1];
for i := 1 to N do M[i,1] := M[i,1] and Col;
вот...используется только одна дополнительная переменная Col
← →
Alx2 © (2004-07-23 20:18) [109]Ребята, коль не составит труда, скажите, что не решено еще? Хочется после страшной рабочей пятницы расслабиться :)
← →
MBo © (2004-07-24 07:41) [110]>Alx2 © (23.07.04 20:18) [109]
>скажите, что не решено еще?
2 3 8 9 12 18
← →
Alx2 © (2004-07-24 12:01) [111]9. объем равен 2/3. Решаем через тройной интеграл.
x^2+y^2=1/4, x^2+z^2=1/4.
=>
V = int(int(int(1,z=-sqrt(1/4-x^2)..sqrt(1/4-x^2)),y=-sqrt(1/4-x^2)..sqrt(1/4-x^2)),x=-1/2..1/2) = 2/3.
В общем случае V = 2/3*D^3 где D - диаметр цилиндров
← →
Думкин © (2004-07-24 12:03) [112]> [111] Alx2 © (24.07.04 12:01)
Бедный Архимед. В этом случае - Ньютон отдыхает.
← →
GrayFace © (2004-07-24 12:37) [113]3) Очень легко
>5. 420. Многовато что-то, но вроде подходит.
>
>Верно!
5) Нет. 20. Верные утверждения:2,3,4,5,6.
6) открыть форточку и измерить.
8) Че значит "Слив самотеком"?
9) Я решал это с произвольным числом цилиндров, только тетрадь надо найти.
← →
MBo © (2004-07-24 12:56) [114]>GrayFace © (24.07.04 12:37) [113]
8) Че значит "Слив самотеком"?
вода вытекает под действием силы тяжести.
Это непростая расчетная задача, без упрощающих трюков.
9) Я решал это с произвольным числом цилиндров, только тетрадь надо найти.
с произвольным числом цилиндров - не нужно, а вот простое решение существует.
← →
Alx2 © (2004-07-24 13:01) [115]>Думкин © (24.07.04 12:03) [112]
Ну не Архимед я :)
8. t=t2/t1*(t1+1/2*t2*ln(abs(2*t1/t2-1)));
свелось к решению диффура h"=h0/t1-a*sqrt(h). Где a=2*sqrt(h0)/t2. h0 - макс. уровень воды в бассейне
← →
GrayFace © (2004-07-24 13:39) [116]2) 2 3 4 5
Номер дома - 120. У Иванова было 3 варианта:
1) 2 3 4 5
2) 1 4 5 6
3) 1 3 5 8
Профессор сказал, что ребенок не один и результат стал очевидным.
← →
MBo © (2004-07-24 13:43) [117]>GrayFace © (24.07.04 13:39) [116]
Верно
← →
Alx2 © (2004-07-25 09:27) [118]12. Пусть минимальное расстояние было равным a.
Тогда при времени погони стремящимся к бесконечности растояние между ними станет a/2.
← →
ИдиотЪ (2004-07-25 12:54) [119]с матрицей мне кажется достаточно два дополнительных вектора, которые дадут всю информацию для построения новой
← →
MBo © (2004-07-25 13:46) [120]>Alx2 © (25.07.04 09:27) [118]
Верно
← →
SergP © (2004-07-25 23:57) [121]
> 9. Задача Архимеда: Два цилиндра диаметром 1 пересекаются
> крестом под прямым углом. Каков объём общей части?
2/3
← →
SergP © (2004-07-26 00:28) [122]
> [121] SergP © (25.07.04 23:57)
>
> > 9. Задача Архимеда: Два цилиндра диаметром 1 пересекаются
>
> > крестом под прямым углом. Каков объём общей части?
>
>
> 2/3
Положим наш какую-нить плоскость A. Очевидно что сечение этой общей части цилиндров плоскостью B параллельной плоскости А будет представлять собой квадрат. Пусть R-радиус цилиндров, x-расстояние между плоскостями A и B. тогда сторона квадрата = 2*sqrt(R^2-(R-x)^2), а площадь соответственно:
S(x)=8*R*x-4*x^2
Тогда объем общей части цилиндров равен
V=интеграл от 0 до 2*R S(x)dx
V=16/3*R^3 = 2/3*D^3 (D-диаметр, D=2*R)
← →
Sha © (2004-07-26 09:21) [123]SergP © (26.07.04 00:28) [122]
v = h * (s1 + 4 * s2 + s3) / 6
h = 1 - высота,
s1 = 0 - площадь верхнего сечения,
s2 = 1 - площадь среднего сечения,
s3 = 0 - площадь нижнего сечения,
v = 2/3
← →
SergP © (2004-07-26 10:04) [124]
> v = h * (s1 + 4 * s2 + s3) / 6
Откуда эта формула?
← →
ИдиотЪ (2004-07-26 10:10) [125]
> SergP ©
Архимед тоже через интеграл находил ?
← →
Sha © (2004-07-26 10:13) [126]SergP © (26.07.04 10:04) [124]
теорема из старой школы, 10 класс:
если площадь основания фигуры зависит от ее высоты как
s = a * h^2 + b * h + c, где a, b, c - любые,
то объем фигуры равен
v = h * (s1 + 4 * s2 + s3) / 6, где
h - высота,
s1 - площадь верхнего сечения,
s2 - площадь среднего сечения,
s3 - площадь нижнего сечения.
← →
Sha © (2004-07-26 10:14) [127]читатать так:
если площадь сечения фигуры зависит от ее высоты как
← →
Думкин © (2004-07-26 10:27) [128]> [125] ИдиотЪ (26.07.04 10:10)
Он пользовался техникой практически эквивалентной - суммировал и устремлял. ТО есть зачатки интегрального были, только в менее абстрактном и поэтому каждый раз частном случае.
← →
ИдиотЪ (2004-07-26 10:33) [129]то Думкин ©
я это проходил, но я имел в виду то, что неужели здесь необходим интеграл ?
По крайней мере тут пересечение можно расчленить на более простые составляющие, у меня получилось несколько конусов
← →
SergP © (2004-07-26 11:05) [130]
> ИдиотЪ (26.07.04 10:33) [129]
> то Думкин ©
> я это проходил, но я имел в виду то, что неужели здесь необходим
> интеграл ?
> По крайней мере тут пересечение можно расчленить на более
> простые составляющие, у меня получилось несколько конусов
Попробовал по разному.... С интегралом все же проще....
← →
Sandman25 © (2004-07-26 12:33) [131][108] default © (23.07.04 19:55)
Решил разобраться на примере, но не работает для простейшего случая: A[1,3] = 1, остальные 0. Массив не изменился.
Идея не совсем понятна, можно объяснить на пальцах? Или поправить код.
← →
Sandman25 © (2004-07-26 12:35) [132][108] default © (23.07.04 19:55)
И самое главное - не вижу, чтобы в рсчетах принимали участие элементы непервой строки и непервого слолбца.
← →
REA © (2004-07-26 12:49) [133]>Какова вероятность того, что последний пассажир сядет на свое место?
Если пассажир №2 пристрелит старушку, то 100%
← →
Andr © (2004-07-26 13:03) [134]4. Вероятность того, что и в строке, и в столбце такого огромного массива не окажется "1" очень мала. Так что можно смело заполнять массив единицами. (Шутка с долей истины)
3. Действительно легко. Но предлагаю Ещё задачу
из этого же рода, но сложнее:
Представьте себе сетку из правильных треугольников (то есть три группы параллельных прямых пересекаются под углом 60 гр.). Можно ли построить квадрат так, чтобы все его вершины находились в узлах этой сетки?
← →
default © (2004-07-26 13:04) [135]Sandman25 © (26.07.04 12:33) [131]
в коде, наверно, где-то наврал...писал тут
есть матрица такая, например
0 1 0 0 0
0 0 1 0 0
0 1 0 1 0
0 0 0 0 0
1)пробегаемся по первому столбцу матрицы и пишем в переменную
Column 1 или 0 в зависимости от того есть там хоть один единичный элемент или нет
в нашем случае Column = 0
2)теперь пробегаемся по строкам матрицы и пишем в элементы первого столбца соотв-нно 1 или 0 в зав-ти от того есть ли в соответствующей строке хоть один единичный элемент
получим такую матрицу
1 1 0 0 0
1 0 1 0 0
1 1 0 1 0
0 0 0 0 0
то есть столбец описывает Ваш вектор B
поскольку предыдущие значения элементов столбца затираются мы и выполняли шаг 1)
3)теперь пробегаемся по столбцам начиная со второго и пишем в верхнюю строку 1 или 0 в зависимости от того есть ли в соот-ем столбце хоть один единичный элемент
получим матрицу
1 1 1 1 0
1 0 1 0 0
1 1 0 1 0
0 0 0 0 0
то есть без первого элемента мы сформировали Ваш вектор С
4)теперь по полученным векторам можно заполнить "внутреннюю" матрицу
получим
1 1 1 1 0
1 1 1 1 0
1 1 1 1 0
0 0 0 0 0
5)теперь надо заполнить первую строку и первый столбец
используя Column и значения первого столбца формируем его конечный вариант без первого элемента(он пригодится для заполнения верхней строки, его мы заполним в самом конце)
получим
1 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 0 0 0 0
теперь по первому элементу верхней строки и другим элементом её же заполняем опять же её без первого элемента получим
1 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 0 0 0 0
теперь получим первый элемент верхней строки как Column and (1,1)
и в конце получим
0 1 1 1 0
0 1 1 1 0
0 1 1 1 0
0 0 0 0 0
надеюсь нигде не ошибся...
← →
Думкин © (2004-07-26 13:07) [136]> [134] Andr © (26.07.04 13:03)
> 4. Вероятность того, что и в строке, и в столбце такого
> огромного массива не окажется "1" очень мала. Так что можно
> смело заполнять массив единицами. (Шутка с долей истины)
Но а как с симметрией:
Вероятность того, что и в строке, и в столбце такого огромного массива не окажется "0" очень мала. Так что можно смело заполнять массив нулями. (Шутка с долей истины)
???
← →
Думкин © (2004-07-26 13:08) [137]
> [136] Думкин © (26.07.04 13:07)
Хотя симметрии нет, поспешил. :((
← →
Ertong © (2004-07-26 13:31) [138]
> MBo © (23.07.04 09:59)
У меня есть предложение: почему бы не придлагать на "пьятничные задачки" больше задач хотя-бы смежных с программированием. Это кроме пищи для мозгов, может принести какую-то реальную помощь в работе. Согласитесь, что кроме 4-й задачи, ничего сильно связанного с программированием здесь нету.
Я имею ввиду задачи на написания алгоритмов. Т.е. использование теории графов, работы с "длинными" числами, динамического программирования и т.д и т.п.
ИМХО для программиста это будет полезнее.
← →
Sandman25 © (2004-07-26 14:16) [139][135] default © (26.07.04 13:04)
Спасибо за подробное объяснение. Просто класс! :)
← →
Думкин © (2004-07-26 14:25) [140]> [138] Ertong © (26.07.04 13:31)
Он в отпуске до 19 августа. Есть желание - флаг в руки.
← →
Sha © (2004-07-26 15:58) [141]Sandman25 © (26.07.04 14:16) [139]
А моего Моргана [99] кто-нибудь заметил? :)
← →
Sandman25 © (2004-07-26 16:14) [142][141] Sha © (26.07.04 15:58)
Заметить-то заметил, а вот понять... :)
Имеем черный ящик со входом и выходом. Что в этом ящике -
1) a or b
или
2) not (not a and not b),
совершенно неважно c точки зрения его работы.
← →
SergP © (2004-07-26 18:02) [143]
> REA © (26.07.04 12:49) [133]
> >Какова вероятность того, что последний пассажир сядет на
> свое место?
>
> Если пассажир №2 пристрелит старушку, то 100%
А вообще-то если имеем дело с самолетами, то там этой сумасшедшей старухе быстро мозги вправят... Последний сядет на свое место 100%, а вот вероятность того что старуха вообще полетит будет довольно низкой... Выкинут нафиг за нарушение порядка... :-)))
← →
Sha © (2004-07-26 21:33) [144]Sandman25 © (26.07.04 16:14) [142]
Действительно, результат будет одинаковым - нам это и надо.
А вот реализовать инверсию элементов и умножение можно прямо по месту - никакой дополнительной памяти не потребуется :)
← →
Sandman25 © (2004-07-27 08:41) [145][87] Sha © (23.07.04 17:42)
Действительно, это решение проходит. но оно имеет сложность порядка
O(n*m*(n+m)), в то время как алгоритм от default - O(n*m)
← →
Sha © (2004-07-27 08:55) [146]Sandman25 © (27.07.04 08:41) [145]
А что мешает совместить лучшее от обоих решений?
← →
Sandman25 © (2004-07-27 08:56) [147][144] Sha © (26.07.04 21:33)
Не понял. Можно поподробнее?
Вместо
a[i,j]:=(a[i,1] or a[i,2] or ... a[i,n])
and (a[1,j] or a[2,j] or ... a[m,j]);
писать
a[i,j]:=not(not (a[i,1] or a[i,2] or ... a[i,n])
or not (a[1,j] or a[2,j] or ... a[m,j]))?
← →
Sandman25 © (2004-07-27 08:57) [148][146] Sha © (27.07.04 08:55)
Это как? Алгоритм default еще можно оптимизировать, но ИМХО при этом не будет использоваться твой алгоритм.
← →
Sha © (2004-07-27 09:18) [149]> Sandman25 © (27.07.04 08:56) [147]
> Не понял. Можно поподробнее?
Идея в следующем.
1. Сначала инвертируем все элементы.
2. Затем вычисляем каждый элемент как логическое
произведения "креста", составленного из элементов,
стоящих в той же строке или столбце. Тут простор для
оптимизации, можно сделать наподобии решения от Default.
3. Напоследок инвертируем все элементы еще раз.
> Sandman25 © (27.07.04 08:57) [148]
> Это как? Алгоритм default еще можно оптимизировать,
> но ИМХО при этом не будет использоваться твой алгоритм
Я имел ввиду, что вроде сложность моего варианта можно
уменьшить до сложности Default. А может быть, и скрестить оба
варианта.
← →
Sandman25 © (2004-07-27 09:23) [150][149] Sha © (27.07.04 09:18)
ИМХО ничего не изменилось.
На втором шаге для каждого элемента просматривается "крест".
В твоем первоначальном варианте то же самое. Зачем добавлять еще 2 прохода по всему массиву для его инвертирования?
← →
Sha © (2004-07-27 09:42) [151]> ИМХО ничего не изменилось.
> Зачем добавлять еще 2 прохода по всему массиву для его инвертирования?
Для того, чтобы можно было умножать, не заботясь о последействии.
Есть ощущение, что эти проходы можно частично совместить с основным шагом работы алгоритма.
> В твоем первоначальном варианте то же самое.
Это и есть первоначальный вариант. Вроде, до него ничего не было.
Если время будет, попробую реализовать, но не раньше выходного.
Пока все на уровне ощущений.
← →
Sandman25 © (2004-07-27 09:46) [152][151] Sha © (27.07.04 09:42)
Последействия нет, я ошибался! 1 остаются 1, 0 могут стать 1. Но если 0 стал 1, то это то же самое, что он с самого начала был 1 - ведь он мог стать 1 только в том случае, если в данной строке и данном столбце УЖЕ были 1 и поэтому появление в строке/столбце ЕЩЕ одной 1 ни на что не влияет. Вот если бы мы сумму единиц считали, тогда последействие было бы.
← →
Sha © (2004-07-27 09:52) [153]Sandman25 © (27.07.04 09:46) [152]
Ты был прав. Последействие есть.
Пусть имееем
0 0 0
0 1 0
Считаем по строкам. После вычисления a[1,1]:
0 0 0
0 1 0
После вычисления a[1,2]:
0 1 0
0 1 0
После вычисления a[1,3]:
0 1 1
0 0 0
Ошибка: правильное эначение a[1,3]=0
← →
Sha © (2004-07-27 09:53) [154]После вычисления a[1,3]:
0 1 1
0 1 0
Ошибка: правильное эначение a[1,3]=0
← →
Sandman25 © (2004-07-27 09:57) [155]То есть:
for I := 1 to N do
begin
for J := 1 to M do
if A[I,J] then
begin
for J1 := 1 to M do
if not A[I,J1] then
for I1 := 1 to N do
if A[I1,J1] then
begin
A[I, J1] := 1;
break;
end;
break;
end;
end;
← →
Sandman25 © (2004-07-27 09:58) [156][153] Sha © (27.07.04 09:52)
Если имеем
0 0 0
0 1 0
то и результат будет
0 0 0
0 1 0
Я тоже запутался тогда - нужно не
единица в строке ИЛИ столбце, а в строке И столбце
← →
Sha © (2004-07-27 10:00) [157]> Sandman25 © (27.07.04 09:58) [156]
Если имеем
0 0 0
0 1 0
то результат должен быть
0 1 0
1 1 1
← →
Sha © (2004-07-27 10:02) [158]> тогда - нужно не единица в строке ИЛИ столбце, а в строке И столбце
Для этого и потребовался Морган.
← →
Sandman25 © (2004-07-27 10:02) [159]Перечитай задачу.
"- Элемент в новой матрице A[i,j]=1, если в изначальной матрице в сторке i есть хоть один элемент =1 И в столбце j есть хоть один элемент =1."
← →
Sandman25 © (2004-07-27 10:03) [160][158] Sha © (27.07.04 10:02)
Теперь я понимаю, зачем ты приплел де Моргана :)
Но все-таки он оказывается лишним.
← →
Sha © (2004-07-27 10:05) [161]Ну да, оказывается, все это время думал над другой задачей :(
Зато решил более сложную :)
← →
Sandman25 © (2004-07-27 10:06) [162][161] Sha © (27.07.04 10:05)
Молодец! Очень полезный прием приведения сложной задачи к простой.
← →
Sha © (2004-07-27 10:07) [163]Sandman25 © (27.07.04 10:06) [162]
Рад стараться!
← →
SergP © (2004-07-27 12:29) [164]Я тоже немного подумал, получается примерно так: (вариант похожий на default"овский, но немножко усовершенствованный...
Правда может где и ошибся... Я не проверял...
// Подготавливаем один вектор на месте первой строки A[1..M,1]
x:=a[1,1];
for i:=2 to M do
begin
x:=x or a[i,1]; // в конце цикла в х будет true, если в строке есть хотя бы один true
for j:=2 to N do // формируем вектор
begin
a[i,1]:=a[i,1] or a[i,j];
if a[i,1] then break; // если уже true то далее незачем проверять
end;
end;
// Заполнение массива
for j=2 to N do
begin
// для начала узнаем есть ли в данной строке A[1..M,j] true
z:=A[1,j]
for i:=2 to M do
begin
z:=z or A[i,j];
if z then break;
end;
// если есть то сразу же и заполняем строку...
// как видно второй вектор нам не требуется
if z then for i:=1 to M do a[i,j]:=z and a[1,j];
end;
// Если в первой строке не было true, то ставим там везде false
if not x then for i:=1 to M do a[i,1]:=false;
← →
SergP © (2004-07-27 12:31) [165]
> SergP © (27.07.04 12:29) [164]
Я исходил из того что в массиве числа boolean, а не 0 или 1
← →
Sandman25 © (2004-07-27 12:32) [166][165] SergP © (27.07.04 12:31)
Это одно и то же :)
← →
SergP © (2004-07-27 12:41) [167]Есть еще простой вариант но с большой сложностью:
for i:=1 to M do for j:=1 to N do
if a[i,j] then for x:=1 to M do for y:=1 to N do
if a[x,y] then a[i,y]:=true;
← →
SergP © (2004-07-27 12:43) [168]
> Sandman25 © (27.07.04 12:32) [166]
> [165] SergP © (27.07.04 12:31)
>
> Это одно и то же :)
Это понятно. Просто писать проще if a[i,j] чем if a[i,j]=1
:)))
← →
Sandman25 © (2004-07-27 12:46) [169][168] SergP © (27.07.04 12:43)
Не так.
var A: Byte;
if Boolean(A) then
...
A := Byte(True);
← →
SergP © (2004-07-27 20:16) [170]
> SergP © (27.07.04 12:41) [167]
> Есть еще простой вариант но с большой сложностью:
>
> for i:=1 to M do for j:=1 to N do
> if a[i,j] then for x:=1 to M do for y:=1 to N do
> if a[x,y] then a[i,y]:=true;
Или чуть побыстрее, типа так:
for i:=1 to M do for j:=1 to N do
if a[i,j] then for y:=1 to N do for x:=1 to M do
if a[x,y] then a[i,y]:=true else break else break;
← →
SergP © (2004-07-27 20:23) [171]Ой, блин, ошибся...
for i:=1 to M do
for j:=1 to N do
if a[i,j] then
begin
for y:=1 to N do
for x:=1 to M do
if a[x,y] then
begin
a[i,y]:=true;
break;
end;
break;
end;
Страницы: 1 2 3 4 5 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Память: 0.92 MB
Время: 0.038 c