-4

编辑:我需要保持元素在原始数组中出现的顺序,所以排序不起作用。

我有一个包含一些元素的一维数组,我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]);
        }
    }
}
4

2 回答 2

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]);
        }
    }
*/
}
于 2016-01-04T17:07:35.907 回答
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;
}
于 2016-01-04T18:55:40.070 回答