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

Вниз

Пятничные задачки, в основном простенькие   Найти похожие ветки 

 
VICTOR_   (2006-03-04 01:34) [80]

12.
A+B+C=11
2+3+6=11
? - A

Ответ.
На втором(A=2). Очевидно вместе с зятем A :)
P.S.Коротко объясню логику. Так как написан не бред шизофреника, то пытаемся читать между строчек формулы для математика :)


 
VICTOR_   (2006-03-04 02:47) [81]

1.
Не прав ни Петя, ни Вася
0,5pi-sqrt(3)/2 < 0,25pi
То есть площади данной фигуры меньше четверти круга


 
VICTOR_   (2006-03-04 02:51) [82]

1.
Пропустил, уже решена :(


 
default ©   (2006-03-04 10:26) [83]

5. 1-sqr(tg(Pi/5))=~0.47


 
SergP.   (2006-03-04 15:55) [84]

13. Алгоритм-то простой, но есть одна трудность, связаная с диапазоном...
Так как бывают такие числа до миллиона, что несколько последующих членов последовательности больше миллиона.
Проблем нет при прямом переборе, но если идти обратным путем, то уже проблематично...

Моя прога нашла возможно это число что нам нужно:
910107   Длина последовательности 475


function GetChislo:integer;
var
 count:integer;
 procedure rq(cnt:integer;ch:integer);
 begin
 if (ch<1000000) and (cnt>count) then begin
                count:=cnt;
                result:=ch;
                form1.Memo1.Lines.Add(inttostr(ch)+"=="+inttostr(count));
                Application.ProcessMessages;
                   end;
 if ch<100000000 then  // Ограничение на числа из последовательности
   begin
     inc(cnt);
     if (ch>4) and (((ch-1) mod 3) = 0) and ((((ch-1) div 3) mod 2)=1)
     then rq(cnt,(ch-1) div 3);
     rq(cnt,ch*2);
   end;
 end;
begin
 count:=0;
 rq(0,1);
end;


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


 
mrcat ©   (2006-03-04 22:31) [85]

>79] MBo ©   (03.03.06 21:22)

Забыл добавить в алгоритм условие сократимости :)

EVE = 242; DID = 303;


 
Bless ©   (2006-03-06 09:01) [86]

> MBo ©   (03.03.06 17:02) [55]
> Верно (C(15,6)-1)

Расскажи, как получается эта формула, плз. А то я решал иначе, длиннее.


 
MBo ©   (2006-03-06 09:56) [87]

>mrcat ©   (04.03.06 22:31) [85]
>EVE = 242; DID = 303;

Все правильно

>SergP.   (04.03.06 15:55) [84]
У меня прямой расчет такой:

function Leng(m: Int64): Integer;
begin
 Result := 0;
 while m <> 1 do begin
   if Odd(m) then
     m := 3 * m + 1
   else
     m := m div 2;
   Inc(Result);
 end;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
 m, l, lm, nm: Integer;
begin
 lm := 0;
 nm := 0;
 for m := 1 to 1000000 do begin
   l := Leng(m);
   if l >= lm then begin
     lm := l;
     nm := m;
   end;
 end;
 Caption := Format("Longest chain %d started at %d", [lm, nm]);
end;


837799 524

>Bless ©   (06.03.06 09:01) [86]
>Расскажи, как получается эта формула, плз. А то я решал иначе, длиннее.
Я тоже длинно решал, с рисованием ступенчатых графиков. Попробую обобщить с помощью первоисточника:

Рассмотрим "генератор" неубывающего десятичного числа из последовательности битов, что-то вроде конечного автомата.
Стартовая (текущая) десятичная цифра числа (не последовательности!)  - 0. Идем по бинарной последовательности.
Единичный бит означает увеличение текущей цифры на 1, нулевой бит - вывод текущей цифры.
Например, 110010 приводит к трехзначному числу 223

бит    тек.цифра     вывод
---       0
1          1
1          2
0          2                2
0          2                2
1          3
0          3                3


Понятно, что для вывода N-значных чисел в последовательности должно быть N нулей, а единиц может быть до 9.
Таким образом, для вывода 6-значных чисел нужно узнать число бинарных строк длиной 15, содержащих 6 нулей. Это С(15,6) (единица отнимается, если исключать 0)


 
Bless ©   (2006-03-06 10:33) [88]

[87]
Красиво, однако


 
default ©   (2006-03-06 11:43) [89]

[83] верно?
по 6 хотел спросить что значит бросить наудачу точку на плоскость?
а то могут получаться разные решения из-за разного толкования как в парадоксах Бертрана с хордами


 
Bless ©   (2006-03-06 11:43) [90]

Кстати, а существуют ли достаточно эффективные алгоритмы вычисления выражений типа C(N, M) для машины?


 
SergP.   (2006-03-06 12:46) [91]


> MBo ©   (06.03.06 09:56) [87]


М-да... Если использовать int64 то и моим способом ИМХО найдется 837799 524, но это будет слишком долго. и поэтому неэффективно...
А прямым способом просто было как-то неинтерестно... И к тому же так как была задана такая задача я подумал что и решать ее нужно не "в лоб"...
Хотя попробую еще подумать... Может что-то и получится...


 
MBo ©   (2006-03-06 13:28) [92]

>default ©   (06.03.06 11:43) [89]
>[83] верно?

Да, верно, пропустил ранее.

>по 6 хотел спросить что значит бросить наудачу точку на плоскость?
Для бесконечной плоскости, конечно, трудно толково определить это.
Ну пусть будет хорошим приближением что-то вроде MaxInt*(Random*2-1) по каждой координате.

>Bless ©   (06.03.06 11:43) [90]
>Кстати, а существуют ли достаточно эффективные алгоритмы вычисления выражений типа C(N, M) для машины?

Не знаю.
Если нужно много разных C(n,k), то разумно будет построить половинку треугольника Паскаля, а если нет возможности хранить таблицу, то придется что-то подобное делать:

function C(n, k: Integer): Int64;
 var
   i: Integer;
 begin
   Result := 1;
   if k < n - k then
     k := n - k;
   for i := k + 1 to n do
     Result := Result * i;
   for i := 2 to n - k do
     Result := Result div i;
 end;



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

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

Наверх





Память: 0.61 MB
Время: 0.092 c
2-1142238684
Stanislav
2006-03-13 11:31
2006.03.26
Сохранение строки в Юникоде


5-1127897094
voe
2005-09-28 12:44
2006.03.26
Подскажите компонент


15-1141227189
Ariman
2006-03-01 18:33
2006.03.26
Трудоустройство иностранцев в России


2-1142251809
Fenix
2006-03-13 15:10
2006.03.26
Печть SynEdit a


2-1142014338
_duk
2006-03-10 21:12
2006.03.26
Память





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский