Xoá nhiều phần tử trong mảng

Viết chương trình nhận đầu vào là số nguyên n và dãy gồm n số nguyên đã được sắp xếp theo thứ tự tăng dần, in ra màn hình dãy với các số riêng biệt sắp xếp theo thứ tự tăng dần (tức là loại bỏ các số lặp lại nhiều lần trong dãy ban đầu)

Em làm như thế này mà sao lại sai ạ

#include<stdio.h>
int main() {
	int n; scanf("%d", &n);
	int a[100];
	int p = 0;
	for (int i = 0; i < n; i++) scanf("%d", &a[i]);
	
	//Xoa phan tu//
	while ( p < n) {
		if (a[p] == a[p + 1]) {
			for (int j = p ; j < n - 1; j++) a[j] = a[j + 1];
			n--;
		}
		p++;
	}
	for (int i =0; i <= n; i++) printf("%d ", a[i]);
	return 0;
}

Code bạn chỉ sai trường hợp là 2 phần tử cuối trùng nhau thôi. Chứ về cơ bản vẫn đúng. Còn cái trên mất số 6 do bạn input 9 phần tử -> phần tử số 6 bị bỏ đi

6 Likes

Cảm ơn bác nhiều :smiling_face_with_three_hearts:

sao vẫn sai bác nhỉ ???

Code mới bạn sửa đâu nè?

3 Likes

E thêm mỗi cái này vào ko bt đúng ko :((

#include<stdio.h>
int main() {
	int n; scanf("%d", &n);
	int a[100];
	int p = 0;
	for (int i = 0; i < n; i++) scanf("%d", &a[i]);
	
	//Xoa phan tu//
	while ( p < n) {
		if (a[p] == a[p + 1]) {
			for (int j = p ; j < n - 1; j++) a[j] = a[j + 1];
			n--;
		}
		p++;
	}
	if (a[n - 1] == a[n - 2]) n--;
	for (int i =0; i <= n; i++) printf("%d ", a[i]);
	return 0;
}
1 Like
#include<stdio.h>
int main() {
	int n; scanf("%d", &n);
	int a[100];
	int p = 0;
	for (int i = 0; i < n; i++) scanf("%d", &a[i]);
	
	//Xoa phan tu//
	while ( p < n - 1) {
		while (a[p] == a[p + 1] && p < n - 1) {
			for (int j = p ; j < n - 1; j++) a[j] = a[j + 1];
			n--;
		}
		p++;
	}
	for (int i =0; i < n; i++) printf("%d ", a[i]);
	return 0;
}

Bạn sai chủ yếu ở chỗ if (a[p] == a[p + 1]) ấy
Giả sử trường hợp này
1 1 1 1 3
Thì ở vòng lặp đầu, nó sẽ thành
1 1 1 3

Sau đó p khi này = 1 -> a[1] = 1, bạn lại so sánh a[1] và a[2] khi này vẫn = 1
-> mảng mới thành 1 1 3

Cuối cùng p thành 2 -> a[2] khi này = 3 -> kết thúc vòng lặp

3 Likes

Lỗi của bạn nằm ở biến p, hãy suy nghĩ kỹ xem trường hợp nào thì p cộng 1, trường hợp nào ko.

4 Likes

cơ mà thay if bằng while thì khác gì ạ

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