iT邦幫忙

0

用C將陣列重複與非重複之數字分別放入另外兩個陣列

  • 分享至 

  • xImage

如一個陣列 X[1,2,3,4,2,3,5,6,1]
重複放入A[] -> A[1,2,3]
非重複放入B[]->B[4,5,6]

brian6724 iT邦新手 5 級 ‧ 2021-01-18 09:03:00 檢舉
1. 先將 array x 做排序,看老師上課有教什麼方式
2. 接下來就開始分重覆不重覆,稍微想一下應該可以寫的出來
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
rogeryao
iT邦超人 8 級 ‧ 2021-01-17 18:47:56
最佳解答
#include <stdio.h>

int main(void) {
    int arrA[] = {1,2,3,4,2,3,5,6,1};     
    int length = sizeof(arrA)/sizeof(arrA[0]);    
    int arrB[length];
    int arrC[length];
    int k,p,s;    
    k=0;
    p=0;
    for (int i = 0; i < length; i++) {    
    	// 記錄重複元素
        for (int j = i + 1; j < length; j++) {    
            if (arrA[i] == arrA[j]) {
                arrB[k]=arrA[i];
                k=k+1;
            }
        } 
        // 記錄非重複元素
        s=0;
        for (int j = 0; j < length; j++) {    
            if (arrA[i] == arrA[j]) {
               s=s+1;
            }
            if (j==(length-1)) {
                if (s==1) {
               	  arrC[p]=arrA[i];
                  p=p+1;
                }
            }
        }
    } 
    //
    printf("重複元素 \n");    
    for(int i = 0; i < k; i++) { 
      printf("%d\n", arrB[i]);  	
    }
    //
    printf("非重複元素 \n"); 
    for(int i = 0; i < p; i++) { 
      printf("%d\n", arrC[i]);  	
    }
	return 0;
}


Demo

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-01-17 11:04:20

https://ithelp.ithome.com.tw/upload/images/20210122/20001787ZYl7n9JAnw.png

#include <stdio.h>

int arrayAppend(int arr[], int x, int idx);
void arrayPrint(int arr[], int len, char ch);

int main()
{
    int X[] = {1,2,3,4,2,3,5,6,1};
    size_t sz = sizeof(X) / sizeof(int);
    int A[sz], B[sz];
    int lenA = 0, lenB = 0, dup;
    
    arrayPrint(X, sz, 'X');
    
    for (int i=0;i<sz;i++) {
        if (X[i]==-1) { continue; }
        if (i==sz-1) {
            lenB = arrayAppend(B, X[i], lenB);
        } else {    
            dup = 0;
            for (int j=i+1;j<sz;j++) {
                if (X[j]==X[i]) {
                    dup = 1;
                    X[j] = -1;
                }
            }
            if (dup) {
                lenA = arrayAppend(A, X[i], lenA);
                X[i] = -1;
            } else {
                lenB = arrayAppend(B, X[i], lenB);
            }
        }
    }

    arrayPrint(A, lenA, 'A');    
    arrayPrint(B, lenB, 'B');    

    return 0;
}

int arrayAppend(int arr[], int x, int idx) {
    arr[idx++] = x;
    return idx;
}

void arrayPrint(int arr[], int len, char ch) {
    printf("%c -> ", ch);
    for (int i=0;i<len;i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

我要發表回答

立即登入回答