Nhập một số nguyên và số k , xoá đi k chữ số trong số nguyên đó sao cho số còn lại có giá trị bé nhất

2 câu trả lời

nhập 1 số
gán số đó vào 1 biến a
chạy vòng lặp
{
lấy số a đó % cho 10 và gán vào biến 1
lấy số a chia cho 10, gán cho a
lấy số a đó % cho 10 và gán vào biến 2
lấy số a chia cho 10, gán cho a
so sánh biến 2 và biến 1 kiểm tra biến nào lớn hơn thì gán vào biến số 3
}
cứ thế cho hết vòng lặp.

Ngoài ra có thể chỉ cần dùng 1 biến a hoặc 1 biến a và 1 biến tạm nếu b biết linh hoạt sử dụng, cách trên dùng 4 biến cho đơn giản.

Ý TƯỞNG:

while (dem<k) do:

   -Kiểm tra xem 2 số liền kề nhau số nào lớn hơn thì xóa bỏ

   -nếu kiểm tra đến hết xâu mà không có cặp số nào như trên thì xóa cuối cùng

uses crt;
var n,tam : string;
    i,j,k,dem : integer;
    ktra : boolean;
BEGIN
    clrscr;
    write('Nhap N: ');
    readln(n);
    write('Nhap K: ');
    readln(k);
    dem := 0;
    ktra := false;
    while (dem<k) do
       Begin
          ktra := false;
          for i := 1 to length(n)-1 do
            begin
                  while (n[i]>n[i+1]) do
                   begin
                    delete(n,i,1);
                    inc(dem);
                    ktra := true;
                    if (dem>=k) then break;
                   end;
            end;
          if (ktra=false) then
           begin
            inc(dem);
            delete(n,length(n),1);
           end;
       End;
    writeln(n);
    readln;
END.

Câu hỏi trong lớp Xem thêm