2016-01-04 3 views
-4

Редактирование: мне нужно поддерживать порядок, в котором элементы присутствуют в исходном массиве, поэтому сортировка не будет работать.Печать только уникальных элементов в массиве

У меня есть 1-мерный массив, содержащий некоторые элементы, и я использую printf() в C, но я хочу только напечатать элемент тогда и только тогда, когда он еще не был напечатан раньше.

Я думаю об использовании вложенных циклов для сравнения, если элемент, который я собираюсь напечатать из текущей позиции в массиве, уже присутствовал в нижнем индексе массива, но он не работает. Что мне не хватает? Или мой подход не так?

До сих пор, я попробовал это, что не работает:

int arr[20]; 

После этого я не принимать пользовательский ввод для нет. элементов в p и, конечно же, p < 20. Затем пользователь вводит элементы один за другим. Для этого я использую scanf().

for(i=1;i<=p;i++) 
{ 
    for(j=i+1;j<=p;j++) 
    { 
     if(arr[i]!=arr[j]) 
     { 
      printf("%d",arr[j]); 
     } 
    } 
} 
+0

_ "Есть либо слишком много возможных ответов, или хорошие ответы будут слишком долго для этого формата. Пожалуйста, добавьте детали, чтобы сузить ответ установить или изолировать проблему, можно ответить на несколько пункты. "_ –

+1

Первое, что нужно спросить себя:« Как бы я это сделал? » (Интересно, кто это делает?) –

+0

Какие типы элементов вы печатаете? Можете ли вы показать нам попытку? – Veltas

ответ

1

Необходимо проверить все предыдущие элементы, прежде чем вы узнаете, что элемент уже произошел.

#include <stdio.h> 
#include <stdlib.h> 

int compareFunc(const void *op1, const void *op2) 
{ 
    int *a, *b; 
    a = (int*)op1; 
    b = (int*)op2; 
    return *a - *b; 
} 

void printUnique(int *array, int numElems) 
{ 
    int curPrintIndex, curCompareIndex; 
    char alreadySeen; 

    for (curPrintIndex=0; curPrintIndex<numElems; curPrintIndex++) 
    { 
     alreadySeen = 0; 
     for (curCompareIndex=0; curCompareIndex<curPrintIndex; curCompareIndex++) 
     { 
      if (array[curCompareIndex] == array[curPrintIndex]) 
      { 
       alreadySeen = 1; 
       break; 
      } 
     } 
     if (alreadySeen == 0) 
      printf("%d\n", array[curPrintIndex]); 
    } 
} 

int main() 
{ 
    const int numItems = 100; 
    int *array, i, lastVal; 

    array = calloc(numItems, sizeof(int)); 

    for (i=0; i<numItems; i++) 
     array[i] = rand()%numItems; 

    printUnique(array, numItems); 

    free(array); 
    return 0; 
/* 
    qsort(array, numItems, sizeof(int), compareFunc); 

    printf("%d\n", array[0]); 
    lastVal = array[0]; 

    for (i=1; i<numItems; i++) 
    { 
     if (array[i] != lastVal) 
     { 
      lastVal = array[i]; 
      printf("%d\n", array[i]); 
     } 
    } 
*/ 
} 
0
#include <stdio.h> 

int main(void){ 
    int arr[20] = { 4,8,4,2,4,8,1,3,2,7 };//the elements are positive integers. 
    int i, j, p = 10; 

    for(i=0;i<p-1;i++){ 
     if(arr[i] < 0) 
      continue; 
     for(j=i+1;j<p;j++){ 
      if(arr[j] > 0 && arr[i]==arr[j]) 
       arr[j] *= -1; 
     } 
    } 
    for(i=0; i < p; ++i) 
     if(arr[i] > 0) 
      printf("%d ", arr[i]); 
    puts(""); 
    return 0; 
} 
Смежные вопросы