Xupyp1 Опубликовано 4 декабря, 2007 Жалоба Поделиться Опубликовано 4 декабря, 2007 Собсно сама цитата:>>Из бухгалтерии принисли задачку:>>Некоторое число заканчивается на "2". Если ее переставить на >>первое место, то число удвоится. Какое число было >>изначально?>>Работа IT отдела была парализована! Напрочь!!!А чем тут парализовывать то?105263157894736842210526315789473684 - оно же, но удвоенноеэт ты канешна так постебался да? по моему 12 и 24 попроще будет...далбайоп, ты четать/щетать умееш?12 -> 21, а не 24. для тебя, наверно, проще, если мозгов на большее не хватаетКак прочитал сразу решил проверить на практике *05Установил Delphi и написал такой код в обработчике кнопки:procedure TForm1.Button1Click(Sender: TObject);var k, i, x1, x2: int64; z, y: integer; s, sx: string;begin i:=12; k:=0; while True do begin x1:=i; s:=IntToStr(x1); sx:='2'; y:=Length(s); for z := 2 to y - 3 do begin sx:=sx+s[z]; end; sx:=sx+s[1]; inc(k); i:=i+10; if k mod 500000=0 then begin label2.Caption:=IntToStr(k); Application.ProcessMessages; end; if StrToInt64(sx)=2*StrToInt64(s) then break; end; edit1.Text:=sx;end;Это чудо считает просто _крайне_ медленно.Можно как-то ускорить обработку? Ссылка на комментарий
genemy Опубликовано 4 декабря, 2007 Жалоба Поделиться Опубликовано 4 декабря, 2007 напиши на асме Ссылка на комментарий
Xupyp1 Опубликовано 5 декабря, 2007 Автор Жалоба Поделиться Опубликовано 5 декабря, 2007 genemyasm я не асилю а прога моя реальный тормоз, superpi считает за 30 секунд до миллиона знаков после запятой у числа пи, а моя по 6 знаков в секунду ((( Ссылка на комментарий
genemy Опубликовано 5 декабря, 2007 Жалоба Поделиться Опубликовано 5 декабря, 2007 просто все эти переводы в сроку и обратно дико тормозяти Application.ProcessMessages тоже убери Ссылка на комментарий
TiX Опубликовано 5 декабря, 2007 Жалоба Поделиться Опубликовано 5 декабря, 2007 А эту цитатку видели:Про то число, что на 2 заканчивается, а при переносе двойки в начало удваивается.x - искомое число. Предполагаю, что оно целое и даже натуральное: все-таки задачка из бухгалтерии.Его можно представить как x = 10*y + 2, тогда 2*x = 20*y + 4;Перестановку двойки в начало можно записать так:y + 2 * 10^(n - 1), где n - число знаков в x.Т.е. по условию 2*x = y + 2 * 10^(n - 1);Решая систему двух уравнений получаем:x = ((10^n) - 1)*2/19.дальше либо перебором с проверкой находим n = 18,и получаем x = 105 263 157 894 736 842.либо учимся решать уравнение(((10^n) - 1)*2/19)(mod 2) = 0,(т.к. x - четное)и находим все решения этой задачки. Но это уже выше моих умственных способностейЗЫ Тож решил прогу накорябать, долго думал где в строке "if (exx) then break;" ошибка Ссылка на комментарий
Гость bot Опубликовано 7 декабря, 2007 Жалоба Поделиться Опубликовано 7 декабря, 2007 Топик был перенесен из форума Поговорим о программировании в форум Программирование Mac Ссылка на комментарий
The_Ice Опубликовано 7 декабря, 2007 Жалоба Поделиться Опубликовано 7 декабря, 2007 А эту цитатку видели:x = ((10^n) - 1)*2/19.дальше либо перебором с проверкой находим n = 18,и получаем x = 105 263 157 894 736 842.либо учимся решать уравнение(((10^n) - 1)*2/19)(mod 2) = 0,(т.к. x - четное)и находим все решения этой задачки. Но это уже выше моих умственных способностейЗЫ Тож решил прогу накорябать, долго думал где в строке "if (exx) then break;" ошибка *142хм =) у меня такая формулка получилась:x = ( 2 * 10 ^ n - 40) / 19 + 2 =)#include #include using std:: cout;using std:: endl;#define DIGITS 20int main( ){ unsigned long long ull_num = 0, ull_tmp = 0; for( unsigned long a = 2; a < DIGITS; a ++) { ull_num = ( 2 * powl( 10, a) - 40) / 19 + 2; if( ull_num % 10 == 2) { ull_tmp = ull_num / 10; ull_tmp += 2 * powl( 10, a - 1); if( ull_num * 2 == ull_tmp) cout << ull_num << "->" << ull_tmp << endl; } }}с ответом сходится =))) Ссылка на комментарий
Volf Опубликовано 23 декабря, 2007 Жалоба Поделиться Опубликовано 23 декабря, 2007 задействовавмат логику получается моно решить логическиесли в конце стоит 2 то перед ней должна стоять 4если стоит 2 то перед ней должна стоять 4если стоит 4 то перед ней должна стоять 8если стоит 8 то перед ней должна стоять 16 но берём только 6 а 1 запоминаемесли стоит 6 то перед ней должна стоять 2+1 от прошлогго действияесли стоит 3 то перед ней должна стоять 6+1если стоит 7 то перед ней должна стоять 4если стоит 4 то перед ней должна стоять 8+1если стоит 9 то перед ней должна стоять 8если стоит 8 то перед ней должна стоять 6+1если стоит 7 то перед ней должна стоять 4+1если стоит 5 то перед ней должна стоять 0+1если стоит 1 то перед ней должна стоять 2+1если стоит 3 то перед ней должна стоять 6если стоит 6 то перед ней должна стоять 2если стоит 2 то перед ней должна стоять 4+1если стоит 5 то перед ней должна стоять 0если стоит 0 то перед ней должна стоять 0+1если стоит 1 то перед ней должна стоять 2и вот она эта чистая 2 => это число 105263157894736842 Ссылка на комментарий
Саян Опубликовано 6 июля, 2008 Жалоба Поделиться Опубликовано 6 июля, 2008 хехе вот это логика, догнать не могу Ссылка на комментарий
Jinchuuriki Опубликовано 7 августа, 2008 Жалоба Поделиться Опубликовано 7 августа, 2008 оО???А если число 542? .. эээ.. ну переставили и получили 254.. А это тогда чё получилось? оО Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти