Viết chương trình C để xóa tất cả phần tử trùng lặp trong mảng

Các bước thực hiện để viết chương trình C:

1. Nhập vào kích thước của mảng size ==> tạo mảng ngẫu nhiên arr gồm size phần tử ==> in mảng ra màn hình

2. Để tìm các phần tử trùng lặp trong mảng đã cho, chúng ta cần hai vòng lặp:

  • Vòng lặp bên ngoài for(i=0; i<size; i++): Vòng lặp này được sử dụng để lặp qua từng phần tử của mảng 
  • Sử dụng một vòng lặp khác để kiểm tra các phần tử tiếp theo để tìm các phần tử trùng lặp: for(j=i+1; j<size; j++)
  • Bên trong vòng lặp thứ 2, kiểm tra nếu phần tử trùng lặp (if arr[i]==arr[j]) thì xóa phần tử mảng đó (bằng cách dịch chuyển phần tử), sau đó giảm kích thước (size = size - 1) (chú ý nếu xảy ra việc dịch chuyển phần tử thì không tăng j - bằng cách dùng lệnh j--)

3. In ra mảng sau khi xóa

Code tham khảo của chương trình C:

#include <stdio.h>
#include <stdlib.h> /*for rand()*/
#include <time.h> // use time.h header file to use time
#define MAX_SIZE 100 // Maximum size of the array
int main()
{
time_t t; // declare time variable
int arr[MAX_SIZE]; // Declares an array of size 100
int size; // Total number of elements in array
int i, j, k; // Loop control variables

/* Input size of the array */
printf("Enter size of the array : ");
scanf("%d", &size);

/* define the random number generator */
srand ( (unsigned) time (&t)); // pass the srand() parameter
/* Create a random array*/
for(int i=0; i<size; i++)
{
arr[i] = rand()%50;
}
/* Print array */
printf("The random array : \n");
for(int i=0; i<size; i++)
printf("%d ", arr[i]);

/* Find duplicate elements in array */
for(i=0; i<size; i++)
{
for(j=i+1; j<size; j++)
{
/* If any duplicate found */
if(arr[i] == arr[j])
{
printf("\n- Delete element %d", arr[j]);
/* Delete the current duplicate element */
for(k=j; k < size - 1; k++)
{
arr[k] = arr[k + 1];
}

/* Decrement size after removing duplicate element */
size--;

/* If shifting of elements occur then don't increment j */
j--;
}
}
}

/* Print array after deleting duplicate elements*/
printf("\nArray elements after deleting duplicates : \n");
for(i=0; i<size; i++)
{
printf("%d\t", arr[i]);
}

return 0;
}