Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

In các phần tử không chung của hai mảng đã sắp xếp

Cho hai mảng đã sắp xếp và đầu ra nên hiển thị các phần tử không chung của chúng.

Given : array1[]= {1, 4, 6, 9, 12}
  array2[]= {2, 4, 7, 8, 9, 10}
Output : 1 2 6 7 8 10 12

Thuật toán

START
Step 1 -> khai báo hai mảng array1 and array2 với các phần tử int và biến n1, n2, i to 0 and j to 0
Step 2 -> tính số phần tử trong array1 sizeof(array1)/sizeof(array1[0])
Step 3-> tính số phần tử trong array2 sizeof(array2)/sizeof(array2[0])
Step 4 -> Vòng lặp While till i<n1 and j<n2
  IF array1[i]<array2[j]
    Print array1[i++]
  End IF
  ELSE If array1[i] > array2[j]
    Print array2[j++ ]
  End ELSE IF
  ELSE
    i++ and j++
  End ELSE
Step 5 -> End Loop While
Step 6 -> loop While i < n1 && array1[i]!=array2[j]
  Print array1[i++]
Step 7 -> End Loop While
Step 8 -> loop While j < n2 && array2[j]!=array1[i]
  Print array2[j++]
Step 9 -> End Loop While
STOP

Ví dụ

#include <stdio.h>

int main(int argc, char const *argv[]) {
  int array1[]= {1, 4, 6, 9, 12};
  int array2[]= {2, 4, 7, 8, 9, 10};
  int n1, n2, i=0, j=0;
  n1 = sizeof(array1)/sizeof(array1[0]); //Calculating number of elements in array1
  n2 = sizeof(array2)/sizeof(array2[0]); //Calculating number of elements in array2
  while(i < n1 && j < n2) {
    if(array1[i] <array2[j]) //checking whether the element of array1 is smaller than array2
      printf("%d\n", array1[i++]);
    else if (array1[i] > array2[j]) //checking whether the element of array2 is smaller than array1
      printf("%d\n", array2[j++]);
    else { //if they are equal increment both i and j
      i++;
      j++;
    }
  }
  while(i < n1 && array1[i]!=array2[j]) //print remaining array1
    printf("%d\n", array1[i++]);
  while(j < n2 && array2[j]!=array1[i]) //print remaining array1
    printf("%d\n", array2[j++]);
  return 0;
}

Kết quả

Nếu chúng ta chạy chương trình trên thì nó sẽ tạo ra đầu ra sau

1
2
6
7
8
10
12