bài 1: Tìm số nguyên dương K nhỏ nhất sao cho tích các chữ số của K bằng số nguyên M cho trước. Nếu không tìm được K, in ra -1. Dữ liệu vào: Một số nguyên M (0≤ M ≤109). Dữ liệu xuất: Số nguyên dương K là kết quả của bài toán. Nếu không tìm được K, in ra -1. Ví dụ: TIMSO.INP TIMSO.OUT 12 26 0 10 bài 2: Có n ngôi làng được đánh số từ 1 đến n nằm trên một đường thẳng, ngôi làng thứ I nằm ở vị trí Ai (1≤ i ≤n). Có một số ngôi làng có điện và những ngôi làng còn lại chưa có. Độ dài dây điện nối từ một ngôi làng i có điện đến ngôi làng j chưa có điện là |Ai-Aj|. Yêu cầu: Tính tổng độ dài dây nối ít nhất để tất cả các ngôi làng đều có điện. Dữ liệu vào: tệp KEODIEN.inp có cấu trúc như sau: Dòng đầu ghi số nguyên n (1≤ n ≤1.000). Dòng thứ hai ghi A1,A2, …,An, (0≤ A1 <A2,< …,<An ≤1.000.000). Dòng thứ ba ghi n số 0 hoặc 1 : nếu số thứ I là không nghĩa là làng này chưa có điện, ngược lại thì làng I đã có điện. Kết quả: ghi ra tệp KEODIEN.OUT ghi tổng độ dài dây nối ít nhất để mọi ngôi làng đều có điện. Ví dụ: KEODIEN.INP KEODIEN.OUT 3 1 5 6 1 0 0 5 GIẢI THÍCH Ý TƯỞNG, CÁCH LÀM NỰA NHA PASCAL
2 câu trả lời
uses crt;
var f:text; i,n:longint; kq:string;
begin
clrscr;
assign(f,'TIMSO.INP');reset(f);
readln(f,n);
close(f);
assign(f,'TIMSO.OUT');rewrite(f);
if n=0 then write(f,10) else
if n=1 then write(f,1) else
begin
for i:=9 downto 2 do
while (n<>0)and(n mod i=0) do
begin
n:=n div i;
kq:=chr(i+48)+kq;
end;
if n=1 then write(f,kq) else write(f,-1);
end;
close(f);
end.
Bài 1:
uses crt;
var n, i: longint;
s: string;
label __exit;
begin
clrscr;
readln(n);
if n = 0 then begin write(10); goto __exit; end;
if n = 1 then begin write(1); goto __exit; end;
for i:=9 downto 2 do begin
while n mod i = 0 do begin
s:=chr(i + 48) + s;
n:=n div i;
end;
end;
if n = 1 then write(s) else write(-1);
__exit:
readln;
end.