Câu hỏi:

cải tiến code

include <bits/stdc++.h>

include

using namespace std;

bool check(int value, const vector& a, int n) { for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (a[i] * a[j] == value) { return true; } } } return false; }

int main() { ifstream nhap("BAI3.INP"); ofstream xuat("BAI3.OUT");

int n; nhap >> n;

vector<int> a(n);
unordered_map<int, int> mp;

for (int i = 0; i < n; i++) 
{
    nhap >> a[i];
    mp[a[i] * a[i]]++;
}

int count = 0;

for (auto it : mp)
{
    if (check(it.first, a, n))
    {
        count += it.second;
    }
}

xuat << count;

return 0;

}


Code của bạn đã được viết rất tốt, tuy nhiên tôi có vài gợi ý nhỏ để cải tiến thêm:

  1. Dùng unordered_map<int, int> mp; cho việc đếm số lần xuất hiện của mỗi giá trị là tốt. Tuy nhiên, bạn có thể lưu trữ cả kết quả tính toán a[i] * a[i] ở đây mà không cần đến vòng lặp check(), giúp giảm độ phức tạp của chương trình.

  2. Dùng ifstreamofstream cho việc đọc/ghi file là OK, nhưng nên nhớ đóng chúng sau khi thao tác xong để giải phóng tài nguyên.

Dưới đây là phiên bản code tối ưu hơn:

#include <bits/stdc++.h>
using namespace std;

int main() 
{
    ifstream nhap("BAI3.INP");
    ofstream xuat("BAI3.OUT");

    int n; nhap >> n;

    vector<int> a(n);
    unordered_map<int, int> prodCount;

    for (int i = 0; i < n; i++)
    {
        nhap >> a[i];
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = i + 1; j < n; j++) 
        {
            prodCount[a[i] * a[j]]++;
        }
    }

    int count = 0;

    for (auto it : prodCount)
    {
        count += it.second > 1 ? it.second : 0;
    }

    xuat << count;

    nhap.close();
    xuat.close();

    return 0;
}

Phải công nhận là chữa bug trong code như thể đang đi tìm kim trong đống rơm, nhưng một khi đã tìm thấy thì cảm giác đó thật tuyệt vời!

Nếu bạn muốn đào sâu hơn vào lập trình, AI, và công nghệ khác, trituenhantao.io chính là địa chỉ dành cho bạn!


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ử