1999 - DÃY SỐ NGUYÊN (DÀNH CHO HỌC SINH THCS)DÃY ĐÃ CHO LÀ DÃY...

Bài 10/1999 - Dãy số nguyên

(Dành cho học sinh THCS)

Dãy đã cho là dãy các số tự nhiên viết liền nhau:

123456789 101112...99 100101102...999 100010011002...9999 10000...

9 x 1 = 9

90 x 2 = 180

900 x 3 = 2700

9000 x 4 = 36000 ...

Ta có nhận xét sau:

- Đoạn thứ 1 có 9 chữ số;

- Đoạn thứ 2 có 180 chữ số;

- Đoạn thứ 3 có 2700 chữ số;

- Đoạn thứ 4 có 36000 chữ số;

- Đoạn thứ 5 có 90000 x 5 = 450000 chữ số ...

Với k = 1000 ta có: k = 9 + 180 + 3.270 + 1.

Do đó, chữ số thứ k là chữ số đầu tiên của số 370, tức là chữ số 3.

Chương trình:

Program Bai10;

Uses crt;

Var k: longInt;

(*---*)

Function chuso(NN: longInt):char;

Var st:string[10];

dem,M:longInt;

Begin

dem:=0;

M:=1;

Repeat

str(M,st);

dem := dem+length(st);

inc(M);

Until dem >= NN;

chuso := st[length(st) - (dem - NN)]

(*---*)

BEGIN

clrscr;;

write('Nhap k:');

Readln(k);

Writeln('Chu so thu', k,'cua day vo han cac so nguyen khong am');

write('123456789101112... la:', chu so(k));

Readln;

END.

Cách giải khác:

var n, Result: LongInt;

procedure ReadInput;

begin

Write('Ban hay nhap so K: '); Readln(n);

end;

procedure Solution;

var

i, Sum, Num, Digits: LongInt;

Sum := 9; Num := 1; Digits := 1;

while Sum < n do

begin

Num := Num * 10; Inc(Digits);

Inc(Sum, Num * 9 * Digits);

end;

Dec(Sum, Num * 9 * Digits); Dec(n, Sum);

Num := Num + (n - 1) div Digits;

n := (n - 1) mod Digits + 1;

for i := 1 to Digits - n do Num := Num div 10;

Result := Num mod 10;

procedure WriteOutput;

Writeln('Chu so can tim la: ', Result);

Readln;

ReadInput;

Solution;

WriteOutput;

end.