01/10/2018, 10:32

Có 1 thắc mắc lớn khi viết code C/C++

Hiện mình trong giai đoạn đầu của học lập trình C/C++, trường mình có một trang web để sv tìm và làm bài tập và nộp lại kết quả lại online. Các bài tập đó thì mình làm cũng được vài bài mà vừa test ở máy của mình chính xác và nộp lên online web trường cũng đúng. Nhưng có những bài tập mà mình làm xong,chạy trên máy ổn,ko lỗi, cho kết quả đúng, Nhưng khi nộp bài đó lên online web trường thì BỊ SAI như 3 cái mình hay bị khi nộp lại là WRONG-ANSWER, COMPILER-ERROR, RUN-ERROR (trong khi ở máy mình chạy bình thường). Mình không hiểu lí do tại sao, hay:

  • do Trình Biên dịch của trang web trường sử dụng khác vs cái visual studio10 của mình ?
  • do mình test thiếu trường hợp ? ( mình tin mình đã test khá đủ =D )
  • do mình gà thuật toán ?
    Đang lo sợ về điều này lắm, ai biết tư vấn với. Hay là cứ mặt kệ chuyện nộp lên web trường sai, miễn là chương trình chạy trên máy mình đúng, không lỗi, kết qủa đúng ? Hay là phải tìm hiểu nguyên do, xem lại bài làm của mình ?
明玉 viết 12:32 ngày 01/10/2018

Trường học của bạn xài GNU Compiler, chắc luôn, nó có điểm khác với Visual Studio Compiler đấy, đặc biệt ở khoản khởi tạo dữ liệu, cấp phát dữ liệu.
Với lại mình đã thấy rằng Visual Studio Compiler là 1 trong những C++ Compiler hiếm hoi mà support đặt tên source file, tên variable, tên function bằng Unicode; GNU Compiler thì không.

Trần Hoàn viết 12:34 ngày 01/10/2018

Khả năng cao nhất là do trình biên dịch khác nhau. Nhưng 2 cái sau cũng không ngoại lệ
Bạn cho ví dụ xem nào?

HK boy viết 12:42 ngày 01/10/2018

Mình sẽ đưa ra vài lí do:

COMPILER-ERROR

  • Do compiler của hệ thống lởm. Mình bị, và biết vài trường hợp bị:
  • Code dùng main() thay vì int main() -> CE.
  • Không include đủ các thư viện mà include mỗi bits/stdc++.h -> CE
  • chỉ thị in số long long%lld mà không phải %I64d -> CE

    Trường hợp này nên sửa theo compiler. Không mất gì của trời =)))
  • Trường hợp code ngu: tự xem lại.

WRONG-ANSWER

Do rất nhiều nguyên nhân sâu xa: thiếu trường hợp, xoá nhầm dòng, sai thuật toán,… hay vớ vẩn hơn nữa là in thiếu dấu xuống dòng. Tự debug code trên máy mình thôi. Còn mức độ nhảm nhất là test sai. Cái này chắc không kêu vào đâu được =))

RUN-ERROR

Runtime Error. Thường gặp khi lỡ truy cập ngoài mảng -> phần lớn do lí do khai báo thiếu mảng; hay đệ quy quá sâu (chắc báo lỗi TLE chứ ít máy báo RTE).

Hay là cứ mặt kệ chuyện nộp lên web trường sai, miễn là chương trình chạy trên máy mình đúng, không lỗi, kết qủa đúng ? Hay là phải tìm hiểu nguyên do, xem lại bài làm của mình ?

Rõ ràng nếu gặp phải WA thì đa phần là do code mình sai. Đừng sai xong bỏ đấy. Code khác đời, không ai đổ vỏ hộ đâu =))

Phan Thế Viễn viết 12:41 ngày 01/10/2018

oh
ví dụ nhé bạn:
đây là đề: https://drive.google.com/file/d/0B6_Lrfs6wi9IU1V0dXFzSFFWTDA/view?usp=sharing
đây là code của mình: https://ideone.com/YTYrVR
mình chạy trên máy thấy ổn, còn nộp thì toàn bị sai check bài này mình làm chuẩn chưa, bạn dùng máy bạn chạy thử coi. help !

明玉 viết 12:41 ngày 01/10/2018

Sorry, nhầm tưởng bạn chơi bruceforce chứ.

Phan Thế Viễn viết 12:44 ngày 01/10/2018

[COMPILER-ERROR] thì mình biết sửa được, vì một số thư viện trên máy mình có nhưng nộp lên web trường thì không ko có ( như tv conio.h)
test thiếu trường hợp thì cũng có lẽ nhưng ít khả năng, các lỗi kia thì chắc cũng phải mắc hoặc do mình sai thuật toán…blah blah chán.
đã cố tìm hiểu rồi mà không hiểu được nên mới lên hỏi. cảm ơn anh nhiều ! =D

HK boy viết 12:46 ngày 01/10/2018

Bài này mình gợi ý để bạn nghĩ đơn giản hơn 1 tí.

  • Để a, b, c, d nguyên.
  • Chia làm 2 trường hợp:
  • b’ = c, a’ <= d.
  • b’ = d, a’ <= c.
  • Nếu a’ thực thì bắt đầu lùi a’ -> b’ lùi cho đến khi gặp đáp án. Lưu ý a’ / b’ = a / b.
HK boy viết 12:40 ngày 01/10/2018

đặc biệt ở khoản khởi tạo dữ liệu, cấp phát dữ liệu.

Mới nhớ ra: thi ACM thì compiler flag có -O2, nếu không khởi tạo biến trước khi dùng có mà WA như chơi, bởi lúc đó mọi biến đều khởi tạo bằng giá trị rác hết.

viết 12:36 ngày 01/10/2018

O2 là tối ưu code mà, sao lại liên quan tới giá trị khởi tạo? Nếu compiler nào mà khi ko tối ưu biến chưa khởi tạo ko có giá trị rác thì chắc là hàng dỏm rồi :shame:

Bài liên quan
0