In ra các phần tử xuất hiện nhiều hơn 1 lần theo thứ tự xuất hiện

Em có câu hỏi mong mọi người gỡ rối giúp e ạ.
Đề bài:

Ý tưởng của e: Dùng một biến đếm ở trong 2 vòng for lồng nhau. khỏi tạo dem = 1,if(a[i]==a[j]) dem++, sau đó if (dem >1) in cái a[i] đó ra. Nhưng code e chưa đúng.
Đây là code của e:

#include<stdio.h>
#include<conio.h>

int main() {
	int n,i,j;
	int a[100];
	int dem;
	scanf("%d",&n);
	for(i=0;i<n;i++) {
		scanf("%d",&a[i]);
	}
	
	for(i=0;i<n;i++) {
		dem=1;
		for(j=i+1;j<n;j++) {
			if(a[i]==a[j]) {
				dem++;
			}
		}
	}
	for(i=0;i<n;i++) {
		if(dem > 1) {
			printf("%d",a[i]);
		}
	}
}
1 Like

Cách đơn giản nhất là chạy ở chế độ debug, chạy từng dòng lệnh để xem cái bạn code nó có đúng với cái bạn đang nghĩ trong đầu không nhé.

5 Likes

Chào bạn!
Mình đã xem qua chương trình của bạn thì mình thấy chương trình của bạn có 1 lỗi khiến chương trình không in ra Kết quả:

for(i=0;i<n;i++) {
	dem=1;
	for(j=i+1;j<n;j++) {
		if(a[i]==a[j]) {
			dem++;
		}
	}
}

ở đây bạn để i < n . Giả sử i = n-1 , khi đó j = i + 1 = n (toang ở đây) -> ĐK đúng là i < n - 1 .
Sau khi sửa xong lỗi trên thì code của bạn vẫn sẽ không ra kết quả mong muốn vì:

  • biến ‘dem’ của bạn không reset lại sau mỗi lần kiểm tra.

đây là code của mình:


5 Likes

anh ơi em cũng làm bài toán này mà k bt lỗi ở đâu anh chỉ giúp em vs ạ

#include<stdio.h>

int main() {
	int n;
	scanf("%d",&n);
	int a[n-1];
	int i;
	for(i=0; i<=n-1; i++) {
		scanf("%d", &a[i]);
	}
	int j;
	int dem = 0;
	for(i=0; i<=n-1; i++) {
		for(j=1; j<=n-1-i; j++) {
			if( a[i] == a[i+j])  {
				printf("%5d",a[i]);	
				dem++;
			}						
		}	
	}
	if(dem == 0) printf("0");
	
	return 0;
}
1 Like

A post was merged into #5

  • Thứ nhất là khi khai báo mảng n phần từ thì phải là a[n] hoặc a[x] ( x > n). Với việc mảng bắt đầu từ 0
  • Thứ hai, mỗi lần đếm bn phải reset lại cái biến đếm.
  • Dùng một mảng đề dánh dấu những phần tử mình đã đếm.
  • Mik gửi code bn có thể tham khảo: https://ideone.com/fKwZSm
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?