01/10/2018, 12:34

Challenge: Đọc số và viết số

Mình định làm challenge chuyển ngôn ngữ, nhưng vì @drgnz cũng muốn làm challenge như vậy nên mình để từ từ rồi tính tiếp.


  • Cho 1 số tự nhiên không giới hạn kiểu, in ra cách đọc số đó.

VD:

1
mot
14
muoi bon
44
bon muoi tu
15
muoi lam
25
hai muoi lam
103
mot tram linh ba
  • Cho 1 cách đọc số, in ra cách số đó.

VD:

hai
2
ba muoi
30
ba muoi tu nghin ty
34000000000000 // Chú thích: số này = 34000 * 10^9

Giới hạn

  • Code không dài quá 150 dòng.

  • Không code kiểu rút dòng. Tức là

a = b; b = c;

hay

if (a == b) c = d, e = f;

không hợp lệ nhưng

a = b;
b = c;

hay

for (int i=0; i<n; i++)

hợp lệ.

  • Dùng càng ít lần if càng tốt, nhưng không dùng quá 7 lần if.

  • Không dùng dạng biến thể của if (a > b ? a : b), không dùng switch case.

  • Không dùng vòng lặp.

Sample test

Input

30
mot tram le ba

Output

ba muoi
103

Test case

không có

Chưa nghĩ ra

Phan Bá Hải viết 14:47 ngày 01/10/2018

Làm challenge “giải mã” teen code v2 có vẻ hóc búa hơn đó

HK boy viết 14:36 ngày 01/10/2018

Mình chưa biết drgnz có làm challenge đấy không nữa :v

*grab popcorn* viết 14:38 ngày 01/10/2018

Làm luôn đi HK Boy :v

phamvandung viết 14:39 ngày 01/10/2018

hack não còn hơn cả teen code v2 nữa

Quang Minh viết 14:48 ngày 01/10/2018

Bài này hồi lớp 11 xưa xửa ông thầy Pascal cho làm, mới đọc từ số sang chữ thôi chứ từ chữ thành số thì hơi gắt :v

Quang Minh viết 14:41 ngày 01/10/2018

Code này viết từ hồi còn bập bõm, đừng cười :v

USES crt;
VAR ht: ARRAY[1..12] OF STRING;
    ds: ARRAY[0..9] OF STRING;
    so: ARRAY[0..9] OF BYTE;
    sau,s,tl: STRING;
    i,n,p,q,d,l,k: BYTE;
BEGIN
REPEAT
REPEAT
clrscr;
textcolor(10);
ht[1]:='tram'; ht[2]:='muoi'; ht[3]:='ti'; ht[4]:='tram'; ht[5]:='muoi';
ht[6]:='trieu'; ht[7]:='tram'; ht[8]:='muoi'; ht[9]:='nghin'; ht[10]:='tram'; ht[11]:='muoi'; ht[12]:='don vi';
ds[0]:='khong'; ds[1]:='mot'; ds[2]:='hai'; ds[3]:='ba'; ds[4]:='bon'; ds[5]:='nam';
ds[6]:='sau'; ds[7]:='bay'; ds[8]:='tam'; ds[9]:='chin';
writeln; write('       Nhap so can doc: '); readln(s);
n:=length(s);
FOR i:=n DOWNTO 1 DO
    IF s[i]<>'0' THEN p:=i;
    delete(s,1,p-1);
n:=length(s);
UNTIL n<=12;
d:=0;
FOR i:=1 TO n DO                                            
    BEGIN
    val(s[i],so[i],l);
    d:=d+l;
    END;                                     
writeln; IF d>0 THEN writeln('       Oop! Ki tu khong hop le :)') ELSE
    BEGIN
    sau:='';
    FOR i:=1 TO n DO
    IF so[i]<>0 THEN q:=i;                           
    FOR i:=1 TO q DO 
        BEGIN
        sau:=sau+' '+ds[so[i]]+' '+ht[12-n+i];
        END;
    IF ((n-q+1) MOD 3=0) THEN sau:=sau+' '+ht[12-n+q+2];
    IF ((n-q-1) MOD 3=0) THEN sau:=sau+' '+ht[12-n+q+1];
WHILE pos('mot muoi',sau)>0 DO
    BEGIN
        k:=pos('mot muoi',sau);
        delete(sau,k,4);
        insert('',sau,k);
    END;
WHILE pos('khong muoi',sau)>0 DO
    BEGIN
        k:=pos('khong muoi',sau);
        delete(sau,k,10);
        insert('linh',sau,k);
    END;
WHILE pos('muoi khong',sau)>0 DO
    BEGIN
        k:=pos('muoi khong',sau);
        delete(sau,k+4,6);
    END;
    sau[2]:=upcase(sau[2]); writeln; writeln('====> ',sau,'.'); END;
    writeln; write(' ~~~ lam lai khong ? (Enter/n): '); readln(tl);
UNTIL tl='n';
readln
END.
HK boy viết 14:39 ngày 01/10/2018

Chia buồn với bác, code của bác không đáp ứng giới hạn :v

Quang Minh viết 14:49 ngày 01/10/2018

:v thôi để khi khác, ôn thi đã, kỳ này tạch thêm môn nữa thì về quê chăn bò

Bài liên quan
0