Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Вниз

Пятничные задачки. Разомнем извилины.   Найти похожие ветки 

 
Думкин ©   (2005-09-16 13:34) [40]

> default ©   (16.09.05 13:28) [37]

Раз 0 обидели - корректность в вере не нуждается. Если конечно, не было ничьих.


 
default ©   (2005-09-16 13:34) [41]

Думкин ©   (16.09.05 13:30) [39]
0+1+2=3:)13 тестов это улёт:)


 
SergP.   (2005-09-16 13:41) [42]

7.   40500000001

Сумма цифр от 1 до 9 равна 45
В каждом разряде каждая цифра встречается 100 000 000 раз
Всего разрядов 9

Итого 40500000000 и добавим 1 (это потому что конечное число 1 000 000 000) мы не учли....

Получим 40500000001


 
SergP.   (2005-09-16 13:47) [43]

7.   40500000001

Сумма цифр от 1 до 9 равна 45
В каждом разряде каждая цифра встречается 100 000 000 раз
Всего разрядов 9

Итого 40500000000 и добавим 1 (это потому что конечное число 1 000 000 000) мы не учли....

Получим 40500000001


 
default ©   (2005-09-16 13:50) [44]

11. первое что приходит в голову, описать прямоугольник вокруг нужной фигуры, и генерировать точки для прямоугольника, если точка не попала в фигуру, то производим генерацию точки ещё раз и тд пока она не попадёт в фигуру


 
palva ©   (2005-09-16 13:53) [45]

MBo ©   (16.09.05 12:36) [24]
> т.е. 6 путей вместо 8 в данной.
8. Что-то у меня для трехмерного случая тоже получается возврат с вероятностью единица. Странно, путей больше и, казалось, вероятность возврата должна быть меньше.


 
SergP.   (2005-09-16 13:55) [46]


> 2. В квадрат со стороной 1 вписан круг. В оставшееся место
> в левом верхнем уголке
> вписан еще один кружок. В оставшееся слева-вверху место
> - следующий и так далее до
> бесконечности. Какова суммарная площадь и периметр кругов?
>


Радиус первой окружности R1=0.5

радиус следующей R(n)=R(n-1)*(sqrt(2)-1)/(sqrt(2)+1)

Получаем геометрическую (сходящуюся) прогрессию где первый член  равен  Pi/4 а коэффициент равен (sqrt(2)-1)^4

Я точно не помню формулу суммы.... Так что


 
MBo ©   (2005-09-16 13:57) [47]

>SergP.   (16.09.05 13:41) [42]
>7.   40500000001
Все верно.

Еще один путь - образуем пары
0, 999999999 // 0 не повлияет на результат
1, 999999998
...
500 миллионов пар по 81 + единица из миллиарда.


 
Jeer ©   (2005-09-16 14:02) [48]

КаПиБаРа ©   (16.09.05 11:28) [17]
MBo ©   (16.09.05 13:05) [28]
Antonn ©   (16.09.05 12:53) [25]

На Jeer ©   (16.09.05 11:13) [16]

S = 0.5*H/(R+H) = 0.5*360/(6371+360) = 0.0267..  (2.67..%)

:)))


 
default ©   (2005-09-16 14:05) [49]

10. C


 
Igorek ©   (2005-09-16 14:07) [50]


> 11. Нетрудно написать процедуру для генерации равномерно
> распределенных
> в прямоугольнике случайных точек.
> А вот как сделать то же самое для круга, треугольника и
> произвольного выпуклого
> четырехугольника?

Один из вариантов:
1 охватываем фигуру прямоугольником по габаритам
2 генерим точку
3 если она не в фигуре то 2


 
MBo ©   (2005-09-16 14:12) [51]

>default ©   (16.09.05 13:50) [44]
11. первое что приходит в голову, описать прямоугольник вокруг нужной фигуры, и генерировать точки для прямоугольника, если точка не попала в фигуру, то производим генерацию точки ещё раз и тд пока она не попадёт в фигуру

Да, так можно. Этот путь в общем-то подходит для круга - пропадает всего 1-Pi/4, т.е примерно четверть случайных чисел, да и проверка на вхождения укладывается в пяток операций.
Но вот для треугольника и четырехугольника и промахов больше, и проверка существенно сложнее.

С точки зрения создания интересного алгоритма лучше считать, что генерация случайного числа - затратная операция. Для каждой точки нам дается пара случайных чисел, и потратить их надо по делу ;)

>palva ©   (16.09.05 13:53) [45]
>8. Что-то у меня для трехмерного случая тоже получается возврат с вероятностью единица. Странно, путей больше и, казалось, вероятность возврата должна быть меньше.
Да, вероятность возврата меньше будет. Насколько я помню, там получается сумма ряда с членами 1/n^3/2, т.е. сходящаяся


 
MBo ©   (2005-09-16 14:20) [52]

>Jeer ©   (16.09.05 14:02) [48]
>На Jeer ©   (16.09.05 11:13) [16]
>S = 0.5*H/(R+H) = 0.5*360/(6371+360) = 0.0267..  (2.67..%)

Пардон, не воспринял, поскольку у меня было в разностной форме (1-R/(R+h))
;))


 
MBo ©   (2005-09-16 14:25) [53]

default ©   (16.09.05 14:05) [49]
10. C

Верно.

>Igorek ©   (16.09.05 14:07) [50]
см. [51]

Проще всего сделать для круга, тут никаких хитростей нет.
А для треугольника нужно маленько подумать.


 
default ©   (2005-09-16 14:50) [54]

MBo ©   (16.09.05 14:25) [53]
можно взять любую точку треугольника за начала косоугольной системы координат, генерируем случайно одну координату точки на каком-то прилежащем к началу координат отрезке прямой, следущую координтату генерируем в пределах обусловленных первой координатой и отрезком прямой не прилежащем к началу координат


 
MBo ©   (2005-09-16 15:02) [55]

Вот тестовая система с некоей намеренно неправильной функцией генерации.
Как ее исправить в соответствии с твоим методом?


function RandPointT(const P:array of TPoint):TPoint;
var
 a,b,c:Double;
begin
 a:=Random;
 b:=Random;
 Result.X:=Round((P[0].X*a+P[1].X*(1-a)+P[0].X*b+P[2].X*(1-b)));
 Result.Y:=Round((P[0].Y*a+P[1].Y*(1-a)+P[0].Y*b+P[2].Y*(1-b)));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 P:array[0..2] of TPoint;
 i:Integer;
 RP:TPoint;
begin
 Randomize;
 P[0]:=Point(0,0);
 P[1]:=Point(250,100);
 P[2]:=Point(100,200);
 Canvas.Polygon(P);
 for i:=1 to 1000 do begin
   RP:=RandPointT(P);
   Canvas.Ellipse(RP.X,RP.Y-1,RP.X+1,RP.Y+1);
 end;
end;



 
КаПиБаРа ©   (2005-09-16 15:07) [56]

11. Можно из центра финуры или любой произвольной точке генерировать угол и расстояние (входящее в фигуру для данного угла) в полярных координатах.


 
Igorek ©   (2005-09-16 15:13) [57]

> MBo ©   (16.09.05 14:25) [53]
> А для треугольника нужно маленько подумать.

А если взять треугольник, в одну вершину поставить начало координат, а оси - по сторонам с длинами А и Б. Генерируем точку (х, у) в прямоугольнике А на Б. Если она выше той диагонали, что не проходит через 0.0, то отзеркаливаем ее ниже диагонали. На треугольник ставим ее сумой векторов, паралельных сторонам с длинами x, y.


 
Igorek ©   (2005-09-16 15:15) [58]


> Проще всего сделать для круга, тут никаких хитростей нет.

Если принять, что каждая точка должна быть использована, то вроде без интегралов не обойтись.


 
MBo ©   (2005-09-16 15:15) [59]

>КаПиБаРа ©   (16.09.05 15:07) [56]
Проверка [56] - явно не равномерное распределение:

[code]
function RandPointC(const CX,CY,R: Integer):TPoint;
var
 a,b:Double;
begin
 a:=Random*R;
 b:=Random*2*Pi;
 Result.X:=Round(CX+a*Cos(b));
 Result.Y:=Round(CY+a*Sin(b));
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 CX,CY,R: Integer;
 i:Integer;
 RP:TPoint;
begin
 Randomize;
 CX:=200;
 CY:=200;
 R:=150;
 Canvas.Ellipse(CX-R,CY-R,CX+R,Cy+R);
 for i:=1 to 5000 do begin
   RP:=RandPointC(CX,CY,R);
   Canvas.Ellipse(RP.X,RP.Y-1,RP.X+1,RP.Y+1);
 end;
end;

[/code]


 
SergP.   (2005-09-16 15:17) [60]


> 6. В комнату внесли два плотных снежка, один по диаметру
> вдвое больше другого.
> Какая часть объема меньшего снежка останется, когда растает
> половина объема большого?


(4^(1/3) - 1)^3  = 0,2027


 
MBo ©   (2005-09-16 15:19) [61]

> Igorek ©   (16.09.05 15:13) [57]
Звучит логично. В коде на базе [55] как это будет выглядеть?


 
Igorek ©   (2005-09-16 15:20) [62]


> Igorek ©   (16.09.05 15:13) [57]

Фигню написал.


 
Igorek ©   (2005-09-16 15:21) [63]


> Звучит логично.

Фигня. Допустим на диагональ прямоугольника упадет сто точек. А соотв. сторона треугольника будет очень маленькая..


 
MBo ©   (2005-09-16 15:24) [64]

>SergP.   (16.09.05 15:17) [60]
> (4^(1/3) - 1)^3  = 0,2027
Правильно.


 
Igorek ©   (2005-09-16 15:24) [65]


> MBo ©   (16.09.05 15:19) [61]
> > Igorek ©   (16.09.05 15:13) [57]
> Звучит логично. В коде на базе [55] как это будет выглядеть?

Нет, все таки правильно. Преобразование треугольника линейное - потому равномерность сохранится. Код долго писать. :)


 
palva ©   (2005-09-16 15:26) [66]

8. Трехмерный случай.
У меня получился общий член ряда (то есть вероятность возврата на шаге 2n) такой:
( (2n)! / ( n!^2 * 2^(2n) ) ) ^ 3

Ряд сходится плохо. 2000 членов дают сумму 0.38517 Дальше надо оценивать хвост, поскольку вычисление общего члена дает переполнение, а сумма ряда при продолжении суммирования все еще ощутимо растет. Упрощать общий член по формуле Стирлинга, как-то стремно.
Ну будет сумма где-то 0.40 что соответствует вероятности возврата 0.29


 
Igorek ©   (2005-09-16 15:27) [67]

11. А вот как сделать то же самое выпуклого четырехугольника?
Поделить на два треугольника, взять сумму их площадей за 1.
Случайную точку сначала определить на какой ставить. :)


 
Igorek ©   (2005-09-16 15:32) [68]

11. Для круга.
Преобразование (x, y) в:
угол - х(0, 360)
длина вектора - y(0, r) = r * (площать круга радиуса y / площадь круга радиуса r)


 
default ©   (2005-09-16 15:33) [69]

MBo ©   (16.09.05 15:02) [55]
похоже тоже неравномерно будет, ибо если треугольник разграфить равноотстоящими отрезками параллельными какой-то его стороне, то при генерации примерно одинаковое число точек будет приходиться на каждый отрезок, но отрезки разные по длине стало быть хоть на каждом отрезке точки и будут примерно на одинаковом расстоянии, но вообщем будет неравномерность


 
MBo ©   (2005-09-16 15:40) [70]

>palva ©   (16.09.05 15:26) [66]
>( (2n)! / ( n!^2 * 2^(2n) ) ) ^ 3

Да, так. Сам я не считал, в книжке приведена сумма 18 членов 0.315
и соотв. вероятность возвращения 1-1/(1+0.315)~0.24


 
MBo ©   (2005-09-16 15:43) [71]

>default ©   (16.09.05 15:33) [69]
тем не менее при некоторой доработке этот способ даст нужный результат


 
GuAV ©   (2005-09-16 15:57) [72]

SergP.   (16.09.05 13:55) [46]
R(n)=R(n-1)*(sqrt(2)-1)/(sqrt(2)+1)


у меня немного не так получилось
R[N] = R[N-1] * (sqrt(2) - 1) / (2 + sqrt(2))

R[N] = ((sqrt(2) - 1) / (2 + sqrt(2)))^N * 1/2
S[N] = sqr((sqrt(2) - 1) / (2 + sqrt(2)))^N * 1/4 * Pi

S = (Pi/4) / (1 - ((sqrt(2) - 1) / (2 + sqrt(2))) = 0,797130834


 
GuAV ©   (2005-09-16 15:58) [73]

11 для круга:

function GetRandomPointFromCircle(R, x0, y0: Integer): TPoint;
var P, F: Extended;
begin
 P := sqrt(Random) * R;
 F := Random * 2 * Pi;
 Result.X := x0 + Trunc(P * cos(F));
 Result.Y := y0 + Trunc(P * sin(F));
end;


 
GuAV ©   (2005-09-16 16:04) [74]


> S = (Pi/4) / (1 - ((sqrt(2) - 1) / (2 + sqrt(2))) =
> 0,797130834

S = (Pi/4) / (1 - sqr((sqrt(2) - 1) / (2 + sqrt(2))) = 0,797130834


 
MBo ©   (2005-09-16 16:09) [75]

>GuAV ©   (16.09.05 15:58) [73]
Верно


 
Igorek ©   (2005-09-16 16:10) [76]

Огласите нерешенные плз.


 
MBo ©   (2005-09-16 16:13) [77]

>GuAV ©   (16.09.05 15:57) [72]
У SergP в [46] правильная формула, и суммарная площадь будет 0.809


 
default ©   (2005-09-16 16:14) [78]

3. 7


 
MBo ©   (2005-09-16 16:23) [79]

>default ©   (16.09.05 16:14) [78]
>3. 7
Верно


 
MBo ©   (2005-09-16 16:24) [80]

Igorek ©   (16.09.05 16:10) [76]

Не решены:
9 и частично 11



Страницы: 1 2 3 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.017 c
4-1124101875
dddim
2005-08-15 14:31
2005.10.09
SW_HIDE


2-1124971738
demek
2005-08-25 16:08
2005.10.09
поиск и работа с формой


1-1127079332
antonioxxx
2005-09-19 01:35
2005.10.09
Регистрация DLL-библиотек


14-1126875653
infom
2005-09-16 17:00
2005.10.09
Защитить программу с исходниками от распространения...


4-1123652186
pepper
2005-08-10 09:36
2005.10.09
Отключение сетевыеx дисков





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский