Theo quan niệm của khoa học huyền bí
phương đông, số 6 được coi là LỘC, số 8 được coi là PHÁT. Nhiều người cố gắng sở
hữu các số này để sử dụng trong số điện thoại hoặc biển số xe, … Số đẹp là số
trong biểu diễn thập phân chỉ chứa hai chữ số trên. Dãy các số đẹp theo thứ tự
là: 6, 8, 66,68,86,88, …
Yêu cầu: Tìm số đẹp thứ K
Dữ liệu vào: Cho từ tệp văn bản LOCPHAT.INP với một dòng duy nhất ghi số nguyên K (1 ≤ K≤ 109).
Kết quả: Ghi ra tệp LOCPHAT.OUT,
một dòng duy nhất ghi số đẹp thứ K
Ví dụ:
LOCPHAT.INP |
LOCPHAT.OUT |
1 |
6 |
4 |
68 |
41 |
68686 |
102 |
866888 |
100046 |
8666688688668888 |
10000047 |
66886668668688686886666 |
44444035 |
6868668866686866886666866 |
555555044 |
66668666888686668866688866868 |
666666034 |
66888868888668666686666886688 |
777777045 |
68886686886888886888886686886 |
888888019 |
86866888886886868868688686866 |
999999000 |
88688866886868866688666688668 |
Hướng
dẫn giải:
- Đổi xâu nhị phân
Ví
dụ: N = 4 = 1002
- - Cộng xâu nhị phân cho 1, quy tắc 1 + 1 = 10 viết 0 nhớ dư
=1; 1 + 0 = 1 viết 1 dư 0.
Ví dụ: N = 4 = 1002 +1 = 1012
-
In ra: in từ 2 đến length (bỏ ký tự đầu)
+ Nếu = 0 ghi 6
+ Nếu = 1 ghi 8.
CODE THAM KHẢO:
program Phat_Loc;
var A,B:array[1..1000] of 0..1;
L, N,M:Qword;
st,s:string;
fi,fo:text;
i:integer;
procedure Henhiphan(M:Qword);
begin
L:=0;
while (M>0) do //doi sang he nhi phan
begin
L:=L+1;
A[L]:= M mod 2;
M:=M Div 2;
end;
end;
procedure inra(st:string);
var i:integer;
begin
for i:=2 to length(st) do
if St[i]='0' then write(fo,6)
else write(fo,8);
writeln;
end;
procedure xuly;
var i,du:integer;
begin
du:=1;st:='';
for i:= 1 to L do
begin
if(A[i]+du=1) then begin st:='1'+st; du:=0;end
else
if(A[i]+du=0) then begin st:='0'+st; du:=0;end
else
if(A[i]+du=2) then begin st:='0'+st; du:=1;end;
end;
if du<>0 then st:='0'+st;
inra(st);
end;
begin
clrscr;
assign(fi,'phatloc.inp');reset(fi);
assign(fo,'phatloc.out'); rewrite(fo);
while not eof(fi) do
begin
readln(fi,N);
//write(fo,N,':':2);
henhiphan(N);
xuly;
end;
close(fi); close(fo);
end.
Đăng nhận xét