Bài tập pascal. Giúp em với. Mai em thi rồi

Khi làm việc với các số tự nhiên, Tom và Jerry thích sắp xếp chúng theo thứ tự từ điển giống như so sánh xâu kí tự, chẳng hạn dãy số (1, 8, 9, 10, 11, 100) sẽ được sắp xếp thành (1, 10, 100, 11, 8, 9). Bài toán Tom đặt ra cho Jerry là: cho ba số A, B, K thì số trong đoạn [A; B] chia hết cho K có thứ tự từ điển nhỏ nhất là số nào?
Hãy giúp Jerry giải bài toán trên.
Dữ liệu vào: Một dòng duy nhất ghi ba số nguyên A, B, K (1 ≤ A ≤ B ≤ 10[SUP]9[/SUP], 1 ≤ K ≤ 10[SUP]9[/SUP]). Dữ liệu vào đảm bảo luôn có nghiệm.
Dữ liệu ra: Một dòng duy nhất ghi một số nguyên tìm được.
Ví dụ:
Input
Output
96 105 3
102

Giải thích ví dụ: Đoạn [96; 105] có 4 số chia hết cho 3 là 96, 99, 102, 105. Dãy số trên được xếp theo thứ tự từ điển ở dạng xâu là 102, 105, 96, 99. Vậy đáp án phải tìm là 102.
[h=2]Tình hình là như vậy ạ. Ai giúp em ngay với. Rất gấp rồi[/h]
 

quanltv

Sư phụ của ADMIN
Bạn sắp thi và mình đoán là khả năng tư duy lập trình, am hiểu về ngôn ngữ cũng đã có rồi, nên mình sẽ không code cho bạn.
Mình sẽ chỉ cho bạn thuật toán theo mình là hiệu quả nhất.
Bước 1: Tìm tất cả các số chia hết cho K, đưa vào 1 mảng
Bước 2: Sắp xếp mảng này theo thứ tự từ điển không giảm
Bước 3: Lấy phần tử đầu tiên của mảng trên, in ra màn hình
HẾT
 
Bạn code cho mình B2 nhé. MÌnh đã làm thử nhưng nó ko ra bạn à. Code pascal nhé
 

VSupport

Ngây thơ trong tối
Bạn code cho mình B2 nhé. MÌnh đã làm thử nhưng nó ko ra bạn à. Code pascal nhé
Bạn đưa code lên đây, sai chỗ nào mọi người sửa cho. Chứ tự code lại thì đâu phải ai cũng có thời gian :oh:
 
uses crt;
var n,j,i,k:integer;
a:array[1..100] of string;
tam:string;
begin
clrscr;
write('Moi ban nhap n:');readln(n);
for i:=1 to n do
begin
write('Nhap so thu ',i,':');
readln(a);
end;
k:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
begin
k:=k+1;
if ord(a[k]) > ord(a[j][k]) then
begin
tam:=a;
a:=a[j];
a[j]:=tam;
end
else
if ord(a[k])=ord(a[j][k]) then
while ord(a[k]) <> ord(a[j][k]) do
begin
k:=k+1;
if ord(a[k]) > ord(a[j][k]) then
begin
tam:=a;
a:=a[j];
a[j]:=tam;
end;
end;
end;
for i:=1 to n do write(a:5);
readln
end.

- - - Updated - - -

Cái này là chỉ là suy ngĩ. Các bác đừng chửi e nhé
 

quanltv

Sư phụ của ADMIN
Bạn code cho mình B2 nhé. MÌnh đã làm thử nhưng nó ko ra bạn à. Code pascal nhé
Ý tưởng ở bước 2 của mình thế này:
Trong dãy bạn nhập vào sẽ có các số nguyên từ 2,3,4,5,... chữ số. VD dãy

Đầu vàoĐầu ra
9126
181299
7318
1261876
6261981
12993948
1876626
198173
39489


Xác định số chữ số của số lớn nhất (số có nhiều chữ số nhất): n=4, còn m là số chữ số của số đang xét
Lập 1 mảng 2 chiều, cột đầu tiên là dãy ban đầu, cột thứ 2 là cột các số tương ứng sau khi nhân mỗi số với 10 mũ (n trừ m), tác dụng là biến đầu của mỗi số thẳng hàng nhau. Sắp xếp theo cột 2, lấy kết quả ở cột 1 :)

sap-xep-thu-tu-tu-dien.jpg
 

DraKam

Ý tưởng: Biến số i thành xâu j rồi so sánh xâu s để tìm số nhỏ nhất.
uses crt;
var a,b,k,i:longint;
s,j:string;
begin
clrscr;
read(a,b,k);
s:=':';
for i:=a to b do
if i mod k=0 then
begin
str(i,j);
if s>j then s:=j;
end;
if s<':' then write(s);
readln;
readln;
end.
 
Sửa lần cuối:
Top