Code bị lỗi sigsegv khi nộp trên spoj

e mới tìm hiểu về c và có đề bài như sau: https://www.spoj.com/ITPTIT/problems/ITP0183I/
đây là bài e làm: http://codepad.org/5M2yRxBQ
khi e chạy trên ideone thì vẫn chạy nhưng khi nộp trên spoj thì bị lỗi.

đây là bạn đang khai báo mãng tĩnh, trong c thì bắt buộc phải , kích thước mảng phải là một hằng số, xác định trước.

Do vậy lỗi ở dòng 8 và dòng 27

Do vậy, ở đây bạn thể khai báo

#define max = 10
int a[max][max];

sau đó dùng như bạn bình thường.

Muốn dùng bao nhiêu, lấy bao nhiêu bô nhớ, thì dùng cấp pháp động.

1 Like
27: int a[n][3]; // <--- lỗi đây bạn

Vì ma trận là n*n.

3 Likes

cảm ơn bác :v ngu ngơ quá =((

Bài của bạn nếu chịu phân tích và tìm công thức tí xíu là đủ rồi, không cần phải tạo matrix.

Đề bài cho tìm phần tử (x, y) trên ma trận n x n, bắt đầu tại giá trị v

  • x = 0, lấy phần tử trên hàng đầu tiên
  • y = n-1, lấy phần tử ở cột cuối cùng
  • x = n-1, lấy phần tử ở hàng cuối cùng
  • y = 0, lấy phần tử ở cột đầu tiên
  • 0 < x < n-1, 0 < y < n-1, chuyển sang đề bài nhỏ hơn “tìm phần tử (x-1, y-1) trên ma trận (n-2) x (n-2), bắt đầu tại giá trị v + 4(n-1)” (v + n + (n-1) + (n-1) + (n-2))

Phần công thức bạn tự tính nhé.

3 Likes

3 posts were split to a new topic: Cần giúp đỡ tìm lỗi sai bài tập trên SPOJ PTIT

Không có tiện thể gì hết nhé :v

1 Like

Bạn đang khai báo sai câu lệnh define. Đúng ra phải là

#define max 10

Với lại, người ta không khuyến khích dùng define để định nghĩa 1 số. Nên dùng const

const int max = 10;
3 Likes

cám ơn bạn, do mình lâu không code, nên có nhẫm lẫn xíu.

bạn có thể nói rõ hơn cho mình và mọi người hiểu tại sao lại không hiểu khích không?

Theo mình hiểu cơ bản như này:.

define thi giống macro, nghĩa là khi biên dịch thì nó sẽ bỏ qua-> không có lợi khi debug

còn const int max = 10. thì nó là biến hằng. đây mới là hằng số thực sự trong C. có gì bạn bổ sung thêm giúp mình

Bạn thử đoán xem kết quả của đoạn code này ra bao nhiêu:

#define ten 5+5

std::cout << ten*ten << endl;
1 Like

cái này khắc phục bẳng cách thêm dấu ngoặc là được mà, còn tại sao lại cần thêm, thì do bản chất của nó, khi biên dịch gặp chỗ nào co ten thì nó thay thế = cái 5+5. Theo bạn đây là lý do, thì mình thấy chưa thực sự quan trọng.

Không phải lúc nào bạn cũng thêm dấu ngoặc vào. Bạn thêm nhưng người khác không thêm. Dùng const sẽ đảm bảo hơn là dùng define, vì define không đảm bảo về kiểu.

Từ khoá google: why const not define c++

1 số link liên quan:

https://cboard.cprogramming.com/cplusplus-programming/96595-static-const-vs-sharpdefine.html

http://www.cplusplus.com/forum/beginner/175991/

2 Likes

ok cám ơn bạn vì một số thông tin bổ ích.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?