Mình chỉ có một góp ý nhỏ về lý do code của bạn trandinhnamvn chạy không đúng khi có 2 số liền nhau.
xét mảng đầu vào A[] = {1, 2, 2, 3, 4, 5, 6, 7, 8, 9} với n bằng 2.
bạn for một biến i chạy từ 0->9
- khi i= 1 thì gặp A[i] == n và bạn cho dịch các phần tử ở phía sau lên 1 bước nên A sẽ thành {1, 2, 3, 4, 5, 6, 7, 8, 9, x} //(x tức là không xác định được, vì bạn gán A[9] = A[10] nhưng mảng chỉ có đến A[9] thôi nên câu lệnh này xẽ không chắc chắn được giá trị của A[9] là gì)
- sau đó i nhảy một đơn vị, chương trình kiểm tra sang A[i] (lúc này là A[2] do i=2) , thấy A[i] = 3 khác với n nên nó chạy tiếp. Ở đây thực ra bạn cần kiểm tra A[1] chứ không phải A[2] do ở bước trước bạn đã dịch A[2] lên vị trí A[1].
- sửa lại code thì thêm 1 dòng là ổn:
Mã:
for (i = 0; i < 10; i++){
if (a[i] == n){
for (j = i; j<10; j++){ //j nên nhỏ hơn 9 chứ không phải mười, nếu không câu lệnh A[j+1] ở dưới sẽ truy cập đến A[10] mà
tam = a[j]; // mảng này chỉ có đến phần tử A[9] thôi
a[j] = a[j + 1];
a[j + 1] = tam;
}
d2++;
i--; //them dong nay
}
}
[/b] Tại Lương Sơn TV bạn sở hữu thể xem truyền hình trực tiếp bóng đá hôm nay các giải đấu to trong và ngoài nước. Lương Sơn TV ko chỉ đem lại những trận chiến mãn nhãn sở hữu chất lượng hình ảnh...
Các giải đấu không thể bỏ lỡ tại...