Jump to content

Welcome to [ iT ] Forums
Register now to gain access to all of our features. Once registered and logged in, you will be able to create topics, post replies to existing threads, give reputation to your fellow members, get your own private messenger, post status updates, manage your profile and so much more. If you already have an account, login here - otherwise create an account for free today!
Hình ảnh

Đề thi tin học trẻ không chuyên Nam Định_Các bác giúp em với


  • Please log in to reply
10 replies to this topic

#1
haidang_0001

haidang_0001

    Thành viên mới

  • Member
  • 29 Bài Viết:
Các bác ơi giúp em với bài thi tin này với
Bài 1: Đánh mã số
Có cách dùng để đánh thứ tự nhưng không dùng chữ số mà ta dùng chữ cái nhưng tuân theo quy tắc: Chữ cái đứng sau trong cách đánh không là chữ cái đứng trước trong bảng chữ cái, 1 vài thứ tự và mã:
Thứ tự Mã chữ
1 A
2 B
3 C
26 Z
27 AA
28 AB
52 AZ
53 BB
78 CC
378 AAA
379 AAB
Ta được cho biết số thứ tự của mã chữ hãy xác định mã chữ tương ứng. Hoặc ta được cho biết mã hãy xác định thứ tự của mã chữ đó.
Cho tệp văn bản MASO.INP (được cho trước), thí sinh làm bài và chỉ nộp tệp MASO.OUT
Dữ liệu vào: Gồm nhiều dòng, mỗi dòng chứa 1 số thứ tự hoặc 1 mã chữ
Dữ liệu ra: Tương ứng với mỗi dòng vào, là có 1 dòng ra thể hiện tương ứng mã chữ hoặc thứ tự tìm được.
Ví dụ:
MASO.INP MASO.OUT
28 AB
AAA 378

#2
Mr.J

Mr.J

    Uy Trấn Giang Hồ

  • Advance Member
  • PipPipPipPipPip
  • 1463 Bài Viết:
Đọc cái đề hoa cả mắt
Mình nói về thuật toán:

-Đầu tiên tạo chương trình con, liệt kê STT và mã tương ứng nhằm đọc dữ liệu vào và đưa ra mã số hay STT tương ứng
Đọc input. Với mỗi dòng gán input vào chương trình con để chạy
Dữ liệu out từ chuơng trình con ta ghi vô tệp là xong
Cuối cùng save thôi


#3
haidang_0001

haidang_0001

    Thành viên mới

  • Member
  • 29 Bài Viết:
Trời!
Bác giải thích thuật toán thế thì ai mà hiểu được?

#4
[email protected]

[email protected]

    Trình độ A CSTH

  • Advance Member
  • PipPip
  • 101 Bài Viết:
Thuật toán của bác BLACK là phương pháp liệt kê, bạn tính sẵn trong chương trình bảng số tương ứng, khi doc dữ liệu vào rồi kiểm tra rồi đưa giá trị tương ứng ra out-put,
Phương pháp này là dễ dùng, nhưng chỉ tính cho những trường hợp nào cần ít tính toán, nếu con số tính toán khá lớn thì chịu chết(khó khăn trong lúc lập bảng tương ứng) vĩ dụ ở bài toán này nếu tính giá trị tương ứng cho số ABCDE thì bó tay :bong

Bài viết này được chỉnh sửa bởi [email protected]: 19 June 2008 - 02:55 PM


#5
cóc kèn_

cóc kèn_

    Căn bản tin học tốt

  • Advance Member
  • Pip
  • 41 Bài Viết:
hic bài này mà không có Giới hạn thì sao mà làm hả bác?
MEM của PC có hạn bác à 8->

#6
jollyjoker

jollyjoker

    Aishiteru P mochiron

  • Advance Member
  • PipPipPipPipPip
  • 1287 Bài Viết:
cái này là bài toán hay đấy. không chỉ là thuật toán lập trình đâu. phải tìm dc quy luật của cách mã hóa.
1 ký tự có 26 mã từ 1-26, Ax có 26 , Bx có 26-1 mã(trừ BA) , Cx có 26-2(trừ CA và CB). cứ thế đến Zx chỉ có 1 là ZZ

từ đó tính được các mã AA, BB, CC

từ các mã AA, BB, CC ta tính được

AB=27{mã của AA}+2{mã của B}-1(mã của A)=28
AZ=27{mã của AA}+26{mã của Z}-1(mã của A)=52
BZ=53{mã của BB}+26{mã của Z}-2{mã của B}=77
CZ=78(mã của CC)+26(mã của Z)-3(mã của C)= 101.

mình chỉ nghĩ được thế thôi.
Love will grow and nothing come in the way
It's true that love is here to stay
All we have to do to face tomorrow

#7
[email protected]

[email protected]

    Trình độ A CSTH

  • Advance Member
  • PipPip
  • 101 Bài Viết:
Trước tiên ta phân tích lại bài toán:
- Phương pháp đánh số dựa vào bảng chữ cái, đơn vị là 1
- Quy tắc Chữ cái đứng sau trong cách đánh không là chữ cái đứng trước trong bảng chữ cái
- Nếu vị trí nào được đánh chữ Z, thì bước tiếp theo nó được sử dụng chữ trước nó(sau khi cộng thêm 1)
ví dụ: Z -> AA (chữ trước nó chưa có nên sau khi cộng thêm 1 là A)
MNZ -> MOO (chữ trước nó là N sau khi cộng 1 là O)
MNZZZ -> MOOOO (cái này các bạn thử tìm hiểu tại sao nhé :mad: )

Bây giờ ta giải bài toán: mình đề xuất một phương pháp sau: nó hơi củ chuổi một tý, nhưng mà nghĩ nát óc mà vẫn chưa ra phương pháp hay. :P

dùng 2 biến: so và chu
so=1 tưong ứng chu ="A"
so=so +1=2 tương ứng chu = chu+1 = "A" +1 ="B"
....
so=26, chu="Z"
so=so+1=27 tưong ứng chu=chu+1="Z" +1 ="AA" (theo nhận xét trên)
....
cứ thế cho nó chạy, đến khi nào nó thảo mãn số của mình thì dừng :-"

Quan trọng ở đây là bạn phải tăng biến "chu" như thế nào, chứ tăng biến "so" thì cứ cho nó cộng 1 thì okie. Các bạn chú ý, nếu "chu" cua mình có chứa chữ "Z" thì các chữ đứng sau nó đều là chữ "Z" theo quy tắc 2,
xác định chữ Z đầu tiên trong "chu" ví dụ chu(i)="Z" -> chu(i+1), .., chu(length(chu))="Z"
khi đó cách tăng chu = chu +1 như sau
chu(1), .., chu(i-2) giữ nguyên,
chu(i-1) tăng lên 1
chu(i), .., chu(length(chu)) gán bằng chu(i-1)

tăng chu="MNZZZ" như sau: chu(3)=chu(4)=chu(5)="Z" ở đây i=3, nên tăng chu(2)=N lên 1 là O
nên ta có MOOOO :|

Function Tang_chu(chu:string):string
begin
xác định vị trí của chu(i)=Z
nếu i=1 (toàn chữ Z) ta them chữ "A" ở đầu và các chữ đều bằng "A" có độ dài tăng thêm 1
ngược lại tăng chu(i-1) lên 1
for j=i to length(chu) do chu(j)=chu(i-1)
end

vòng lặp chính của bài toán

so=1, chu="A" //bien Type dùng để lấy loại kiểm tra đổi 1: so -> chu hoặc 2: chu->so
Repeat
kiemtra=false
case type of
1: if so = soKiemTra then begin chuKiemTra=chu; kiemtra=true end;
2: if chu=chuKiemTra then begin soKiemTra=so; kiemtra=true end;
end case
so=so+1;
chu=Tang_chu(chu);
Until kt;

case type of
1: Write(chuKiemTra)
2: Write(soKiemTra)
endcase

#8
haidang_0001

haidang_0001

    Thành viên mới

  • Member
  • 29 Bài Viết:
Bác Nightmate ơi!
Bác viết hẳn 1 đoạn chương trình cho em được ko?

#9
nham00

nham00

    Thành viên mới

  • Newbies
  • 1 Bài Viết:
bài này thật sự hơi đơn giản, này nhé
phân tích
các kí tự như aa, ab, ac,.. bbb,bbc...
bạn nghĩa theo hướng đơn giản hơn đi, nó giống một dạng hệ số thôi
đây là hệ cơ số 26 sử dụng các kí tự từ a đến z
vì vậy để chuyển sang số thứ tự của nó, ta chỉ việc chuyển đổi sang hệ thập phân đơn giản nó là đáp áp
chúc thành công

#10
tung5amkb

tung5amkb

    Thành viên mới

  • Newbies
  • 2 Bài Viết:
uses crt;
var n,i,j,d: longint;
kq: string[255];
begin
clrscr;
readln(n);
kq:='A'; i:=1;
while i<>n do
begin
inc(i);
if kq[length(kq)]='Z' then
begin
for j:= length(kq) downto 1 do
if (kq[j]='Z') and (kq[j-1]<>'Z') then break;
if j=1 then
begin
kq:='A'+kq;
for j:= 1 to length(kq) do kq[j]:='A'
end
else
begin
kq[j-1]:=succ(kq[j-1]);
for d:= j to length(kq) do kq[d]:=kq[j-1];
end;
end
else kq[length(kq)]:=succ(kq[length(kq)]);
end;
writeln(kq);
readln
end.

Bạn tự tìm hiểu ý nghĩa từng đoạn nhé, phần chuyển chữ về số thì làm thêm ct con vào nữa là ok rồi, các lệnh trong đó gần giống như trên

Bài viết này được chỉnh sửa bởi tung5amkb: 16 June 2013 - 04:00 PM

  • tung5amkb likes this

#11
tung5amkb

tung5amkb

    Thành viên mới

  • Newbies
  • 2 Bài Viết:
Đây là cả bài:

uses crt;
var fi,fo: text;
n,i,j,d: longint; code: integer;
a,kq: string[255];
function so_chu (n: longint): string;
begin
kq:='A'; i:=1;
while i<>n do
begin
inc(i);
if kq[length(kq)]='Z' then
begin
for j:= length(kq) downto 1 do
if (kq[j]='Z') and (kq[j-1]<>'Z') then break;
if j=1 then
begin
kq:='A'+kq;
for j:= 1 to length(kq) do kq[j]:='A'
end
else
begin
kq[j-1]:=succ(kq[j-1]);
for d:= j to length(kq) do kq[d]:=kq[j-1];
end;
end
else kq[length(kq)]:=succ(kq[length(kq)]);
end;
end;
function chu_so (a: string): longint;
begin
while kq<>a do
begin
inc(n);
so_chu(n);
end;
end;
begin
clrscr;
assign(fi,'danhmaso.in'); reset(fi);
assign(fo,'danhmaso.out'); rewrite(fo);
while not eof(fi) do
begin
readln(fi,a);
val(a,n,code);
if code=0 then so_chu(n) else chu_so(a);
if code=0 then writeln(fo,kq) else writeln(fo,n);
end;
close(fi);
close(fo);
end.




special thanks to our all time users for being with us

Calvin Music

Close [X]