Trang chủ Tin Học Lớp 11 Cho xâu ký tự T gồm n ký tự chỉ gồm chữ cái, chữ số. Em hãy thực hiện hai...
Câu hỏi :

Cho xâu ký tự T gồm n ký tự chỉ gồm chữ cái, chữ số. Em hãy thực hiện hai thao tác sau: - Thao tác 1: Đếm các ký tự là ký tự số trong xâu T; - Thao tác 2: Tìm số P trong xâu ký tự T là số nguyên tố lớn nhất. Số P là tất cả các ký tự số liên tiếp trong xâu ký tự T và không có số 0 vô nghĩa. Ví dụ trong xâu ký tự T=aB0011cd230d124ab17 có các số P là 11, 230, 124, 17. Số nguyên tố P lớn nhất là 17. * Dữ liệu vào: Đọc vào từ file văn bản NTMAX.INP gồm một xâu ký tự T. * Kết quả ra: Ghi ra file bản NTMAX.OUT gồm: - Dòng 1 ghi số lượng các ký tự là ký tự số trong xâu T; - Dòng 2 ghi ra số nguyên tố P lớn nhất, nếu không có số P nguyên tố ghi ra số 0. * Ví dụ: NTMAX.INP NTMAX.OUT Giải thích aB0011cd230d124ab17 12 17 - Có 12 ký tự số trong xâu - Số P nguyên tố lớn nhất là 17 Ab12cd44bcd 4 0 Tinhoc 0 0 * Giới hạn: - Có 15/35 test, tương ứng 3,0 điểm với n 255 và P 103 ; - Có 10/35 test, tương ứng 2,0 điểm với n 255 và P 106 ; - Có 10/35 test, tương ứng 2,0 điểm với n 5.10 6 và P 5.106 . * Lưu ý: - Mỗi kết quả đúng được 50% số điểm của test; - Thí sinh phải đưa ra đủ 2 kết quả theo cấu trúc của file NTMAX.OUT (làm bằng lập trình c++ cần gấp mọi người ơi)

Lời giải 1 :

#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;

bool isPrime(int n) {
  if (n < 2) return false;
  for (int i = 2; i <= sqrt(n); i++) {
    if (n % i == 0) return false;
  }
  return true;
}

int toNumber(string s) {
  int res = 0;
  for (char c : s) {
    res = res * 10 + (c - '0');
  }
  return res;
}

void solve(string T) {
  int count = 0; 
  int maxPrime = 0; 
  string num = ""; 
  for (char c : T) {
    if (isdigit(c)) { 
      count++; 
      num += c; 
    } else { 
      if (!num.empty()) { 
        int n = toNumber(num); // 
        if (isPrime(n) && n > maxPrime) { 
          maxPrime = n; 
        }
        num = ""; 
      }
    }
  }

  if (!num.empty()) {
    int n = toNumber(num);
    if (isPrime(n) && n > maxPrime) {
      maxPrime = n;
    }
  }
  // In kết quả ra file NTMAX.OUT
  ofstream fout("NTMAX.OUT");
  fout << count << endl;
  fout << maxPrime << endl;
  fout.close();
}

int main() {
  string T; 
  ifstream fin("NTMAX.INP"); // Đọc dữ liệu từ file NTMAX.INP
  fin >> T;
  fin.close();
  solve(T); 
}

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 11

Lớp 11 - Năm thứ hai ở cấp trung học phổ thông, gần đến năm cuối cấp nên học tập là nhiệm vụ quan trọng nhất. Nghe nhiều đến định hướng tương lai và học đại học có thể gây hoang mang, nhưng hãy tự tin và tìm dần điều mà mình muốn là trong tương lai!

Nguồn :

sưu tập

Copyright © 2024 Giai BT SGK