Программирование алгоритмов циклической структуры. Не очень сложная.

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Marvell
Сообщения: 9
Зарегистрирован: 17 ноя 2007, 11:23

Для заданного K, вычислить K-тую цифру последовательности
2 4 6 8 1 0 1 2 1 4 1 6 1 8 2 0 2 2 2 4 2 6 2 8 3 0 ...
(Записаны подряд все четные натуральные числа)
проблема в том, что когда мы например берем 5-ый элемент то должно показывать не 10, а 1, если 6-ой, то 0 и т.д.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Рассмотрев структуру последовательности можно заметить, что:
К=от 0 до 4, однозначные числа
К=от 5 до 5 + 45*2 - двузначные
К=от 95 до 95 + 450*3 - трехзначные и т.д.
Это дает возможность по значению К вычислить само число, а потом уже взять конкретную цифру этого числа. Возможно есть способ проще и элегантнее но в это время суток что-то в голову ничего не прет...

Код: Выделить всё

uses crt;

var k, ei, b, bi, m : integer;
                  s : string;

begin
Clrscr; ei := 5; b := 1; m := 1;
Readln(k);
if k < 5 then
   begin
   Writeln(k*2);
   Halt(0);
   end;
while (k>=ei) do
   begin
   inc(m);
   bi := ei;
   ei := ei + 45*b*m;
   b := b * 10;
   end;
Str(b + ((k-bi) div m)*2, s);
Writeln('Element is a part of number : ',s);
Writeln('Element = ',s[1 + (k-bi) mod m]);
end.
It's a long way to the top if you wanna rock'n'roll
Ответить