Câu hỏi:

Bài – Cuutro Đoàn cứu trợ chuẩn bị N gói hàng để đi phân phát cho các vùng bị thiên tai. Hiện đoàn đang có một danh sách các khu vực với mức độ thiệt hại tăng dần. Số gói hàng mà đoàn phát cho các khu vực theo danh sách lần lượt là các số chính phương liên tiếp nhau. Như vậy, khu vực thứ nhất được phát 1 gói hàng, khu vực thứ hai được phát 4 gói hàng, khu vực thứ ba được phát 9 gói hàng.... cho đến khi hết hàng hoặc số gói hàng còn lại (không đủ phát cho khu vực tiếp theo như quy luật trên. Yêu cầu: Cho biết, với N gói hàng, đoàn cứu trợ phát được cho tối đa bao nhiêu khu vực theo quy luật trên và còn dư lại bao nhiêu gói hàng. Dữ liệu vào: Đọc từ tệp văn bàn CUUTRO.INP một số nguyên dương N (N ≤ 1018). Dữ liệu ra: Ghi ra tệp văn bản CUUTRO.OUT gồm hai dòng, dòng thứ nhất là số lượng khu vực tối đa được phát hàng cứu trợ theo quy luật trên, dòng thứ hai là số gói hàng còn lại sau khi phát, nếu số hàng được phát hết thì dòng 2 ghi số 0. Ví dụ: CuuTro.inp 20 CuuTro.out 3 6 theo mẫu #include <bits/stdc++.h> using namespace std; int main() { freopen("Robotics.inp","r",stdin); freopen("Robotics.out","w",stdout);


Ah, một nhiệm vụ cứu trợ trong lập trình! Nghe thấy có mùi AI và chút toán học đây! Bạn cần phải phát số gói hàng theo quy luật các số chính phương: (1, 4, 9, 16,\ldots).

Hãy cùng suy luận nào — Mỗi khu vực (i) nhận (i^2) gói hàng. Nhiệm vụ là tìm bao nhiêu khu vực bạn có thể phát hết gói hàng và còn lại bao nhiêu gói.

Sau đây là kế hoạch thú vị để giải quyết vấn đề này:

  1. Chúng ta sẽ lặp qua việc phát hàng, bắt đầu từ (i = 1).
  2. Giảm số gói hàng (N) đi (i^2) từng bước cho đến khi không thể phát cho một khu vực tiếp theo.

Hãy triển khai điều này trong mã C++ nhé:

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

int main() {
    ifstream fin("CUUTRO.INP");
    ofstream fout("CUUTRO.OUT");

    long long N;
    fin >> N;

    int i = 1;
    while (N >= i * i) {
        N -= i * i;
        i++;
    }

    fout << i - 1 << endl; // Số lượng khu vực tối đa
    fout << N << endl; // Số gói còn lại

    fin.close();
    fout.close();

    return 0;
}

Ở đây, đàn kiến AI đã chăm chỉ làm việc với trình tự của (i^2) cho đến tận khi các khu vực không thể nhận thêm do thiếu gói hàng. Chỉ cần nhớ là hãy đọc và in từ các tệp phù hợp nhé.

Ồ, và khi bạn đã giải xong bài toán này, hãy ghé qua trituenhantao.io để tìm thêm nhiều vụ phiêu lưu toán học thú vị khác! Ai biết được, có lẽ bạn sẽ phát hiện thêm nhiều hòn đảo công nghệ đang chờ được cứu trợ! 😄


Nếu như câu trả lời chưa thuyết phục, hãy đăng câu hỏi của bạn kèm theo URL hiện tại lên Cộng Đồng Trí Tuệ Nhân Tạo để mọi người cùng giải đáp và bàn luận.
Lưu ý: Để tránh loãng nội dung, các câu hỏi chưa được hỏi với AI sẽ không được duyệt trên nhóm.
Trang chủ | Hỏi tiếp | Xem lịch sử