01/10/2018, 10:04
Lỗi bài toán số tăng giảm
Chào mọi người,mình có 2 cái hàm nhỏ trong bài contest,đó là số tăng giảm.
Vấn đề là,nếu mình tách riêng từ hàm,tức chỉ xét 1 trong 2 dãy tăng hoặc giảm thì mọi thứ đều okay,nhưng nếu mình gộp hàm lại thì kết quả lại sai.điển hình là số 12342 này.
Mọi người chỉ giúp mình với ạ,xin cảm ơn! <3
code: http://codepad.org/Wt1zMkUJ
Bài liên quan
Mình lười đọc code của bạn quá. Nhưng mình cho bạn một thuật toán thế này, dễ code, ít lỗi:
Gọi mảng đầu vào là int[] P.
Nếu
(P[i] - P[i - 1]) * (P[i] - P[i + 1]) > 0
thì đoạn P[i - 1] đến P[i + 1] là đoạn tăng giảmSummary
Thuật toán rất hay,cám ơn bạn!
Nhưng mình đang thắc mắc code của mình,do đây chỉ là 2 hàm nhỏ thôi nên phải biết lỗi mới xử lý các hàm khác được :((
Kiểu như 13241 ấy à? Cái đó có liên quan đến biểu thức sign*(a[i] - a[i-1]) > 0 với sign = +/-1. Nếu điều kiện sai thì thoát ngay và mỗi lần lặp phải đổi dấu sign.
@rogp10 sign là gì hả b
sign là một biến kiểu bool, thể hiện là số này cần phải tăng hay giảm. nếu số đó cần phải tăng mà lại giảm thì thông báo không phải số tăng giảm rồi thoát ngay.
@noz1995 mình thay thế nó bằng return 0; rồi mà nhỉ :<
Còn code của bạn thì không liên quan gì đến cái đề bài cả. Hai hàm tang() và giam() là hàm kiểm tra xem dãy đó là dãy tăng hay dãy giảm, còn dãy tăng giảm thì không phải là cả 2 loại đó, hành vi của chương trình là sai. Ví dụ nếu bạn nhập dãy mà một nửa tăng một nửa giảm thì nó sẽ báo là có (12342)
2 hàm tách biệt nhau sao lại nửa tăng nửa giảm vẫn thỏa mãn được nhỉ?
sign=-1 thì thành ra a[i-1] - a[i] > 0, hay a[i] < a[i-1].
Mình k dùng mảng bài này do còn 1 vài hàm khác nữa,mà code mảng mình chưa cứng nên chưa sử dụng vào bài hơi phức tạp kiêu này được :<
Thực ra viết là a[i] cho dễ hình dung thôi.
Hihi mình cảm ơn,dùng mảng xử lý tốt hơn thiệt <3
Tại vì nó chạy hết nửa đầu thì hàm tăng đúng. khi nó sai thì nửa sau lại thành nửa giảm nên (tang() || giam()) luôn đúng