Đếm số lượng các phần tử giảm nhiều nhất trong mảng

mọi người cho mình hỏi tại sao code này của mình lúc ra đúng nhưng lúc ra nhiều hơn

int max=0,dem=0;
	for(int i=0;i<n;i++)
	{
		for(int j=i+1;j<n;j++)
		{
			if(a[i]>a[j])
			{
				dem++;
				if(dem>max)
			    {
			    	max=dem;
			    }
			}
			else 
			{
				dem=0;
			}			
		}
	}
	return max;
1 Like

sorry mình không hiểu đề bài lắm, có phải là tìm xem cái chuỗi giảm nào dài nhất không. nếu vậy thì chỉ cần 1 vòng for thôi. Thay vì so sánh a[i] với a[j] thì so sánh 1 số với số tiếp theo hoặc số trước nó
a[i] > a[i+1]
còn code của bạn có lẽ nó không hoạt động chắc vì thiếu break, nếu phát hiện chuỗi không còn giảm nữa thì phải thoát vòng for phía trong, nếu không nó vẫn đếm tiếp cho i tiếp theo, nhưng mà so sánh a[i] với a[j]
thì có thể như này 9 7 8 nên cũng sai luôn rồi

5 Likes

Nếu là dãy con giảm dài nhất thì như vầy không ăn thua gì đâu.
Mảng con thì 1 for thôi là được.

4 Likes

À thì ra là vậy cảm ơn bạn nhiều, mình mới học được vài tuần, còn kém quá học cứ máy móc nghĩ rằng dùng 2 vòng for sắp xếp mảng là được. mà nếu như khi chuỗi ko giảm nữa thì reset lại biến đếm bằng 0 thì cũng giống như break phải không không bạn

ủa, vậy đề bài là như thế nào đó bạn?
Bạn có thể đưa nguyên văn đề bài được không?
Có 1 vài bộ test (ví dụ) nữa thì cảm ơn nhiều lắm

Nhập vào một mảng có n số nguyên. Đọc ra màn hình các thông tin sau : Số lượng các phần tử giảm nhiều nhất

VD: Ta có mảng 3 5 1 -2 -3 6 4 2
Thì có 4 phần tử giảm nhiều nhất
Vì 5 > 1 > -2 > -3 giảm liên tục nên lưu lại, khi đến 6>-3 thì reset biến đếm, ta thấy 6 > 4 > 2 thì có lưu vào biến đếm = 3, so sánh 2 chuỗi thì 4 lớn nhất nên xuất ra 4

Cái này là 1 câu hỏi nhỏ trong trong nhiều bộ bài tập thầy cho nên em chỉ có vậy thôi

2 Likes

à, tôi hiểu rồi, có nghĩa là tìm số lượng phần tử của mảng mà những phần tử đó là 1 dãy số giảm dài nhất

2 Likes

đúng vậy anh, anh thấy dùng 1 vòng lập for rồi lưu biến đếm như vậy được không

1 Like

uk, tôi nghĩ bạn chỉ cần dùng 1 vòng for, 1 biến đếm và 1 biến max là được

max = max < dem ? dem : max
2 Likes

Không biết bạn sửa lại code chưa, tôi thấy đoạn này là chưa tốt.
Thay vì mỗi lần bạn tăng biến đếm, bạn đi so sánh với max.
Bạn hãy so sánh đếm với max trước khi bạn reset đếm về 0. Bạn sẽ giảm được khá nhiều bước so sánh

2 Likes

Cảm ơn anh đã góp ý, còn nếu như muốn xuất cái dãy đó thì làm sao vậy anh

thêm 1 biến index nữa, lưu giá trị đầu tiên của dãy

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