Chuyển đến nội dung chính

ĐỀ THI TIN HỌC TRẺ TỈNH PHÚ YÊN LẦN THỨ XII

ĐỀ THI TIN HỌC TRẺ TỈNH PHÚ YÊN LẦN THỨ XII
Năm 2009 –  Khối Trung học Cơ sở – Thời gian: 120 phút
 




Bài 1: Dãy số nguyên
Dãy các số tự nhiên được viết ra thành một dãy vô hạn trên đường thẳng:
1234567891011121314.....  (1)
Hỏi số ở vị trí thứ 1000 trong dãy trên là số nào?
Em hãy làm bài này theo hai cách: Cách 1 dùng suy luận logic và cách 2 viết chương trình để tính toán và so sánh hai kết quả với nhau.
Tổng quát bài toán trên: Chương trình yêu cầu nhập số K từ bàn phím và in ra trên màn hình kết quả là số nằm ở vị trì thứ K trong dãy (1) trên. Yêu cầu chương trình chạy càng nhanh càng tốt.
Bài 2: Dãy số Fibonaci
Như các bạn đã biết dãy số Fibonaci là dãy 1, 1, 2, 3, 5, 8, .... Dãy này cho bởi công thức đệ qui sau:
F1 = 1, F2 =1, Fn = Fn-1 + Fn-2 với n > 2
1. Chứng minh khẳng định sau:
Mọi số tự nhiên N đều có thể biểu diễn duy nhất dưới dạng tổng của một số số trong dãy số Fibonaci.
N = akFk + ak-1Fk-1 + .... a1F1
Với biểu diễn như trên ta nói N có biểu diễn Fibonaci là akak-1...a2a1.
2. Cho trước số tự nhiên N, hãy tìm biểu diễn Fibonaci của số N.
Input:
Tệp văn bản P11.INP bao gồm nhiều dòng. Mỗi dòng ghi một số tự nhiên.
Output:
Tệp P11.OUT ghi kết quả của chương trình: trên mỗi dòng ghi lại biểu diễn Fibonaci của các số tự nhiên tương ứng trong tệp P11.INP.
Ví dụ:
P11.INP
P11.OUT
7
13
9
5
11
7 = 5 + 2
13 = 13
9 = 8 + 1
5 = 5
11 = 8 + 3
Bài 3: Palindrom
Số Palindrom là số đối xứng nghĩa là đọc từ trái qua phải giống như đọc từ phải qua trái. (ví dụ: 15951; 44444; … Dĩ nhiên số 01210 không phải là số đối xứng). Em hãy viết chương trình hiển thị các số đối xứng có 5 chữ số và chia hết cho một số nguyên nhập từ bàn phím, hiển thị theo qui cách mỗi dòng hiện 5 số, mỗi trang màn hình chứa 100 số  và đếm xem có bao nhiêu số như vậy?
Dữ liệu vào: Số nguyên.
Kết quả ra: Các số đối xứng có 5 chữ số và đếm có bao nhiêu số. Hiển thị theo qui cách.
Ví dụ:
Dữ liệu vào
Kết quả ra
13
     10101     11011     15951     16861     17771
     18681     19591     20202     21112     22022
     26962     27872     28782     29692     30303
     31213     32123     33933     34843     35753
     36663     37573     38483     39393     40004
     44944     45854     46764     47674     48584
     49494     50105     51015     55955     56865
     57775     58685     59595     60206     61116
     62026     66966     67876     68786     69696
     70307     71217     72127     73037     77977
     78887     79797     80408     81318     82228
     83138     84048     88988     89898     90509
     91419     92329     93239     94149     95059
     98689     99599
Co tat ca: 67 so
 Cán bộ coi thi không giải thích gì thêm !


ĐÁP ÁN
ĐỀ THI TIN HỌC TRẺ TỈNH PHÚ YÊN LẦN THỨ XII
Năm 2009 –  Khối Trung học Cơ sở – Thời gian: 120 phút
 




Câu 1: Dãy số nguyên (20đ)
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.

Câu 2: Dãy số Fibonaci (30đ)
P11.INP
P11.OUT
7
13
9
5
11
100
20
40
77
44
66
32
16
71
56
87
61
7 = 5 + 2
13 = 13
9 = 8 + 1
5 = 5
11 = 8 + 3
100 = 89 + 8 + 3
20 = 13 + 5 + 2
40 = 34 + 5 + 1
77 = 55 + 21 + 1
44 = 34 + 8 + 2
66 = 55 + 8 + 3
32 = 21 + 8 + 3
16 = 13 + 3
71 = 55 + 13 + 3
56 = 55 + 1
87 = 55 + 21 + 8 + 3
61 = 55 + 5 + 1

Câu 3: (50đ)
Dữ liệu vào
Kết quả ra
13
     10101     11011     15951     16861     17771
     18681     19591     20202     21112     22022
     26962     27872     28782     29692     30303
     31213     32123     33933     34843     35753
     36663     37573     38483     39393     40004
     44944     45854     46764     47674     48584
     49494     50105     51015     55955     56865
     57775     58685     59595     60206     61116
     62026     66966     67876     68786     69696
     70307     71217     72127     73037     77977
     78887     79797     80408     81318     82228
     83138     84048     88988     89898     90509
     91419     92329     93239     94149     95059
     98689     99599
Co tat ca: 67 so
33
     13431     18381     21912     23232     26862
     28182     31713     36463     41314     44944
     46264     49894     51115     54745     56065
     59695     64546     69496     74347     77977
     79297     82828     84148     87778     89098
     92629     97579
Co tat ca: 27 so
43
     11911     13631     15351     17071     28982
     32723     37973     39693     41714     43434
     45154     58785     60806     62526     64246
     77877     79597     81618     83338     85058
     96969    
Co tat ca: 21 so



ĐÁP ÁN
ĐỀ THI TIN HỌC TRẺ TỈNH PHÚ YÊN LẦN THỨ XII
Năm 2009 –  Khối Trung học Cơ sở – Thời gian: 120 phút
 




Câu 1: Dãy số nguyên (20đ)
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 Daycacsotunhien;
var n, Result: LongInt;
procedure ReadInput;
begin
  Write('Ban hay nhap so K: '); Readln(n);
end;

procedure Solution;
var
  i, Sum, Num, Digits: LongInt;
begin
  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;
end;

procedure WriteOutput;
begin
  Writeln('Chu so can tim la: ', Result);
  Readln;
end;
begin
  ReadInput;
  Solution;
  WriteOutput;
end.

Câu 2: Dãy số Fibonaci (30đ)
{$R+}
const
  Inp = 'P11.INP';
  Out = 'P11.OUT';
  Ind = 46;
var
  n: LongInt;
  Fibo: array[1..Ind] of LongInt;
procedure Init;
var
  i: Integer;
begin
  Fibo[1] := 1; Fibo[2] := 1;
  for i := 3 to Ind do Fibo[i] := Fibo[i - 1] + Fibo[i - 2];
end;
procedure Solution;
var
  i: LongInt;
  hfi, hfo: Text;
begin
  Assign(hfi, Inp);
  Reset(hfi);
  Assign(hfo, Out);
  Rewrite(hfo);
  while not Eof(hfi) do
  begin
    Readln(hfi, n);
    Write(hfo, n, ' = ');
    i := Ind; while Fibo[i] > n do Dec(i);
    Write(hfo, Fibo[i]);
    Dec(n, Fibo[i]);
    while n > 0 do
    begin
      Dec(i);
      if n >= Fibo[i] then
      begin
        Write(hfo, ' + ', Fibo[i]);
        Dec(n, Fibo[i]);
      end;
    end;
    Writeln(hfo);
  end;
  Close(hfo);
  Close(hfi);
end;
begin
  Init;
  Solution;
end.
P11.INP
P11.OUT
7
13
9
5
11
100
20
40
77
44
66
32
16
71
56
87
61
7 = 5 + 2
13 = 13
9 = 8 + 1
5 = 5
11 = 8 + 3
100 = 89 + 8 + 3
20 = 13 + 5 + 2
40 = 34 + 5 + 1
77 = 55 + 21 + 1
44 = 34 + 8 + 2
66 = 55 + 8 + 3
32 = 21 + 8 + 3
16 = 13 + 3
71 = 55 + 13 + 3
56 = 55 + 1
87 = 55 + 21 + 8 + 3
61 = 55 + 5 + 1

Câu 3: (50đ)
Dữ liệu vào
Kết quả ra
13
     18681     19591     20202     21112     22022
     26962     27872     28782     29692     30303
     31213     32123     33933     34843     35753
     36663     37573     38483     39393     40004
     44944     45854     46764     47674     48584
     49494     50105     51015     55955     56865
     57775     58685     59595     60206     61116
     62026     66966     67876     68786     69696
     70307     71217     72127     73037     77977
     78887     79797     80408     81318     82228
     83138     84048     88988     89898     90509
     91419     92329     93239     94149     95059
     98689     99599
Co tat ca: 67 so
33
     13431     18381     21912     23232     26862
     28182     31713     36463     41314     44944
     46264     49894     51115     54745     56065
     59695     64546     69496     74347     77977
     79297     82828     84148     87778     89098
     92629     97579
Co tat ca: 27 so
43
     11911     13631     15351     17071     28982
     32723     37973     39693     41714     43434
     45154     58785     60806     62526     64246
     77877     79597     81618     83338     85058
     96969    
Co tat ca: 21 so


Nhận xét

Bài đăng phổ biến từ blog này

DÃY ĐAN DẤU TRONG PASCAL

DÃY ĐAN DẤU TRONG PASCAL Dãy đan dấu là dãy không có 2 phần tử cạnh nhau có dấu giống nhau. ví dụ: -2 4 -9 5 -23 8 là dãy đan dấu Thủ tục kiểm tra dãy đan dấu trong dãy số: procedure dandau; var i,j:integer;     kt:boolean; begin kt:=true; for i:=1 to N-1 do                 begin                 j:=i+1;                 if a[i] *a[j] >0 then kt:=false;                 end; If kt=true then write('Day A la day dan dau') else write('Day A khong phai day dan dau'); end;

Tam giác số (Pascal)

TAM GIÁC SỐ  (Câu 4. Hội thi Tin Học Trẻ Phú Yên lần thứ XIX - năm 2016)                              7                          3       8                      8      1       0                   2     7        4       4                 4    5      2       6       5 Cho một tam giác gồm các số nguyên không âm (xem hình trên). Hãy viết chương trình tính tổng lớn nhất của các số nằm trên lộ trình từ đỉnh xuống: - Tại mỗi bước đi, lộ trình có thể đi xuống phía bên trái hoặc xuống phía bên phải. - Số hàng trong tam giác lớn hơn...

VÒNG LẶP KHÔNG XÁC ĐỊNH WHILE..DO; REPEAT .. UNTIL

VÒNG LẶP KHÔNG XÁC ĐỊNH  WHILE..DO; REPEAT .. UNTIL - Vòng lặp While..do While <điều kiện > Do  <câu lệnh>; Câu lệnh sau do được thực hiện khi điều kiện được thỏa mãn (điều kiện =true); vòng lặp kết thúc khi điều kiện không thỏa (điều kiện =false) - Vòng lặp Repeat .. until; Repeat <câu lệnh>; Until <điều kiện>; Lặp lại câu lệnh cho đến khi nào  thỏa mãn điều kiện  (điều kiện =true) thì dừng lại;  Bài tập: Nhập vào một số nguyên A thỏa mãn (0<A<100), Tính tổng các số nguyên từ 1 đến A (S=1+2+...+A). Vận dụng câu lệnh While .. do uses crt; var A,I:  Integer; S:longint; begin          a:=0;          while not ((a>0) and (a<100)) do          begin          write('Nhap gia tri cua A:'); read(A);           end;          s:=0...