Trang chủ Tin Học Lớp 8 Câu 4: Số nguyên tố lớn nhất (4 điểm) Tên...

Câu 4: Số nguyên tố lớn nhất (4 điểm) Tên tệp chương trình: CAU4.* Cho một xâu S gồm các chữ in thường và các chữ số. Yêu cầu: - Xác định số ký tự khác nha

Câu hỏi :

Giúp mình câu này với mọi người

image

Câu 4: Số nguyên tố lớn nhất (4 điểm) Tên tệp chương trình: CAU4.* Cho một xâu S gồm các chữ in thường và các chữ số. Yêu cầu: - Xác định số ký tự khác nha

Lời giải 1 :

`*` `Pascal:`
`" "`

program le_plus_grand_nombre_premier;
uses crt;
var S, temp: string;
    per: array [1..255] of byte;
    nom: array [1..255] of integer;
    en, sor: text;
    i, j, max, quan, drap: byte;
    k: integer;
    
begin
    clrscr;
    assign(en, 'CAU4.INP');
    reset(en);
    
    assign(sor, 'CAU4.OUT');
    rewrite(sor);
    
    readln(en, S);
    
    j := 1;
    temp := '';
    for i := 1 to length(S) do
        per[i] := 0;
        
    for i := 1 to length(S) do
    begin
        per[ord(S[i])] := per[ord(S[i])] + 1;
        
        if S[i] in ['0' .. '9'] then
            temp := temp + S[i]
        else 
        begin
            val(temp, nom[j]);
            j := j + 1;
            temp := '';
        end;
    end;
    
    if S[length(S)] in ['0' .. '9'] then
    begin
        val(temp, nom[j]);
        j := j + 1;
    end;
        
    max := 0;
    quan := 0;
    for i := 1 to 255 do
    if per[i] <> 0 then
    begin
        quan := quan + 1;
        if per[i] > max then
            max := per[i];
    end;
    
    writeln(sor, quan);
    writeln(sor, max);
    
    quan := 0;
    for i := 1 to j - 1 do
    begin
        drap := 1;  
        k := 2;
        
        while (drap = 1) and (k <= sqrt(nom[i])) do
        begin
            if nom[i] mod k = 0 then 
                drap := 0;
            k := k + 1;
        end;
        
        if (drap = 1) and (nom[i] > quan) then
            quan := nom[i];
    end;
    
    if quan <> 0 then 
        writeln(sor, quan)
    else
        writeln(sor, -1);
    
    close(en);
    close(sor);
end.


$\color{#00FFFF}{\text{_________}}$ $\color{#33FFFF}{\text{_________}}$ $\color{#66FFFF}{\text{_________}}$ $\color{#99FFFF}{\text{_________}}$ $\color{#CCFFFF}{\text{_________}}$

var S, temp: string;
    per: array [1..255] of byte;
    nom: array [1..255] of integer;
    en, sor: text;
    i, j, max, quan, drap: byte;
    k: integer;


`" "`
      + temp: Chuỗi để lưu tạm các cụm gồm các chữ số liền kề nhau
      + per[i]: Số lần xuất hiện của kí tự có mã ASCII là i
      + nom[i]: Cụm số thứ i xuất hiện trong xâu S
$\color{#00FFFF}{\text{_________}}$ $\color{#33FFFF}{\text{_________}}$ $\color{#66FFFF}{\text{_________}}$ $\color{#99FFFF}{\text{_________}}$ $\color{#CCFFFF}{\text{_________}}$

    j := 1;
    temp := '';
    for i := 1 to length(S) do
        per[i] := 0;
        
    for i := 1 to length(S) do
    begin
        per[ord(S[i])] := per[ord(S[i])] + 1;
        
        if S[i] in ['0' .. '9'] then
            temp := temp + S[i]
        else 
        begin
            val(temp, nom[j]);
            j := j + 1;
            temp := '';
        end;
    end;
    
    if S[length(S)] in ['0' .. '9'] then
    begin
        val(temp, nom[j]);
        j := j + 1;
    end;


`" "`
      + Khi duyệt qua mỗi kí tự:
            + per[ord(S[i])] := per[ord(S[i])] + 1: tăng số lần xuất hiện của kí tự S[i], ord(S[i]) trả về giá trị của mã ASCII của kí tự S[i]
            + temp: Lưu các ký tự số liên tiếp, khởi tạo lại rỗng khi duyệt phải kí tự không phải số, và khi gặp kí tự không phải số biến j sẽ tăng lên 1 (Kết thúc cụm số trước đó)
            + val(temp, nom[j]): Chuyển chuỗi số temp thành kiểu nguyên và lưu vào nom[j]

`" "`
      + Một chuỗi số được chuyển sang kiểu nguyên khi gặp kí tự kề kí tự cuối của chuỗi số không phải kí tự số, nếu kí tự cuối cùng của S là số thì cần thêm đoạn code sau để có thể chuyển cụm số cuối cùng của S vào nom:     if S[length(S)] in ['0' .. '9'] then begin val(temp, nom[j]); j := j + 1; end;
$\color{#00FFFF}{\text{_________}}$ $\color{#33FFFF}{\text{_________}}$ $\color{#66FFFF}{\text{_________}}$ $\color{#99FFFF}{\text{_________}}$ $\color{#CCFFFF}{\text{_________}}$

    max := 0;
    quan := 0;
    for i := 1 to 255 do
    if per[i] <> 0 then
    begin
        quan := quan + 1;
        if per[i] > max then
            max := per[i];
    end;


`" "`
      + max: Số lần xuất hiện nhiều nhất của 1 kí tự trong S
      + quan: Số lượng kí tự khác nhau trong S
$\color{#00FFFF}{\text{_________}}$ $\color{#33FFFF}{\text{_________}}$ $\color{#66FFFF}{\text{_________}}$ $\color{#99FFFF}{\text{_________}}$ $\color{#CCFFFF}{\text{_________}}$

    quan := 0;
    for i := 1 to j - 1 do
    begin
        drap := 1;  
        k := 2;
        
        while (drap = 1) and (k <= sqrt(nom[i])) do
        begin
            if nom[i] mod k = 0 then 
                drap := 0;
            k := k + 1;
        end;
        
        if (drap = 1) and (nom[i] > quan) then
            quan := nom[i];
    end;
    
    if quan <> 0 then 
        writeln(sor, quan)
    else
        writeln(sor, -1);


`" "`
      + Đặt cờ ban đầu drap = 1, nếu từ 2 đến $\sqrt[]{nom[i]}$ có số mà nom[i] chia hết thì drap = 0 (nom[i] không phải nguyên tố)
      + Ban đầu quan = 0, nếu có số nguyên tố > quan thì giá trị quan sẽ thay đổi, nếu không đổi thì in -1


Bạn có biết?

Tin học là một ngành khoa học chuyên nghiên cứu quá trình tự động hóa việc tổ chức, lưu trữ, xử lý và truyền dẫn thông tin của một hệ thống máy tính cụ thể hoặc trừu tượng. Tin học bao hàm tất cả các nghiên cứu và kỹ thuật có liên quan đến việc mô phỏng, biến đổi và tái tạo thông tin. Hãy tận dụng sức mạnh của tin học để giải quyết các vấn đề và sáng tạo ra những giải pháp mới!

Nguồn :

Wikipedia - Bách khoa toàn thư

Tâm sự lớp 8

Lớp 8 - Năm thứ ba ở cấp trung học cơ sở, học tập bắt đầu nặng dần và sang năm lại là năm cuối cấp, áp lực lớn dần. Hãy chú ý đến sức khỏe, cân bằng giữa học và nghỉ ngơi để đạt hiệu quả tốt nhất!

Nguồn :

sưu tập

Liên hệ hợp tác hoặc quảng cáo: gmail

Điều khoản dịch vụ

Copyright © 2021 HOCTAPSGK