Bài tập  /  Bài đang cần trả lời

Lập trình - Lớp 9
13/09/2023 23:30:44

Ngôn ngữ lập trình pascal

Ngôn ngữ lập trình pascal : Số Kaprekar được đặt theo tên nhà toán học Ấn Độ D.R.Kaprekar, được định nghĩa như sau: đó là số tự nhiên X viết trong hệ đếm B có đúng K chữ số khác nhau đôi một và X = X1 - X2, trong đó X1 và X2 lần lượt là các số thu được bằng cách xếp lại các chữ số của X theo thứ tự giảm dần (X1) và tăng dần (X2).
Yêu cầu: Viết chương trình thực hiện: với mỗi cặp giá trị B và K, hãy tìm một số Kaprekar X.
Dữ liệu vào: KAPREKAR.INP gồm 2 số B và K cách nhau khoảng trắng (2 £ B £ 10; K<B).
Dữ liệu ra: KAPREKAR.OUT ghi số X tìm thấy, nếu không tìm thấy ghi số 0.
Ví dụ: Bộ dữ liệu sau đây cho biết: trong hệ đếm thập phân, có 4 chữ số (B = 10, K = 4), X =6174 là số Kaprekar có 4 chữ số (khác nhau đôi một), X1 - X2 = 7641 - 1467 = 6174

1 trả lời
Hỏi chi tiết
207
0
0
Đức Anh Trần
14/09/2023 00:22:49
+5đ tặng
program kaprekar;

var
    B, K: integer;
    f: text;

function sortDigits(n: integer; desc: boolean): integer;
var
    arr: array[0..9] of integer;
    i, j, temp: integer;
    res: string;
begin
    for i := 0 to B - 1 do arr[i] := 0;

    while n <> 0 do
    begin
        inc(arr[n mod B]);
        n := n div B;
    end;

    res := '';
    if desc then
    begin
        for i := B - 1 downto 0 do
            for j := 1 to arr[i] do
                res := res + chr(48 + i);
    end
    else
    begin
        for i := 0 to B - 1 do
            for j := 1 to arr[i] do
                res := res + chr(48 + i);
    end;
    sortDigits := StrToInt(res);
end;

function isKaprekar(x: integer): boolean;
begin
    isKaprekar := x = sortDigits(x, true) - sortDigits(x, false);
end;

procedure findKaprekar;
var
    i, max, min, count: integer;
begin
    min := 1;
    for i := 2 to K do min := min * B + 1;
    max := min * B - 1;

    for i := min to max do
    begin
        count := 0;
        max := i;
        while max <> 0 do
        begin
            inc(count);
            max := max div B;
        end;

        if count = K then
            if isKaprekar(i) then
            begin
                writeln(f, i);
                exit;
            end;
    end;
    writeln(f, 0);
end;

begin
    assign(f, 'KAPREKAR.INP');
    reset(f);
    readln(f, B, K);
    close(f);

    assign(f, 'KAPREKAR.OUT');
    rewrite(f);
    findKaprekar;
    close(f);
end.
 

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng ký tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng bạn bè học sinh cả nước, đến LAZI, sôi động, tích cực, trải nghiệm
Câu hỏi Lập trình mới nhất

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường

Học ngoại ngữ với Flashcard

×
Gia sư Lazi Gia sư
×
Trợ lý ảo Trợ lý ảo