Можете помочь решить задачу в паскале на тему циклические алгоритмы?
Помочь можем. Решать будете сами.
Числа 1,10,100,1000..выписаны подряд без пробелов между ними.Ввести N (1<=N<=1000000) и определить,какая цифра стоит на N-ом месте.
Я думала записать саму эту последовательность как k1:=K*10...K2=K1*10...., где k:=1.Но не знаю как ввести еще один счетчик, чтобы считалось само место числа, потому что в любом случае ответ будет либо 1,либо 0. Или я вообще неправильно рассуждаю?(
неправильно) записывать последовательность не надо...
точнее записать-то можно, но это крайне неэкономично.
Я бы сделал так.
Есть текущая длина числа, обзовём её буквой C, изначальна равна 1 (для 1 равна одному, для 10 - двум и т.д.).
Есть N - позиция числа.
Каждую итерацию уменьшаем N на C, и увеличиваем C на единицу.
Итерации проводим пока N>C.
Как только N <= C смотрим значение N. Если N=1, то мы попали в первую цифру какого-то числа, то бишь, в единичку. Если не равно 1, то попали в нолик.
Если что непонятно, прошу обращаться)
А как представить уменьшение итерации С на N?
N:=N-C;
Получилось) Но, если проверить, то зачастую программа выдает 0, когда должна быть единица. Может я неправильно записала?
Var N,C:integer;
begin
write('Введите место числа N=');
read(N);
c:=1;
While N<=C do N:=N-C; c:=c+1;
If N<=C then begin read(N) end;
If N=1 then begin write(1)end;
If N<>1 then begin write(0)end;
end.
хм... чего-то ерунда какая-то....
1. Во-первых,
Насколько я помню, после do, если нет begin'а, выполняется только первая строчка. Так что заменить стоит
эх...третья строка вообще не нужна. После do выполняется вся строка.
Ура) все верно) Спасибо большое вам.
На здоровьице))
Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)