C语言问题,删除整型数组内重复的项并输出,如能解惑,不胜感激。

要求:用一个数组实现该功能,用两个数组的方法很简单0v0.三个以上的重复也要有用哦QvQ

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

int main(int argc, char *argv[]) 
{
srand((unsigned)time(0));
int s[30]={0};
int i,j;
for(i=0;i<30;i++)
{
s[i]=rand()%10;
}
printf("\n源数组:");
for(i=0;i<30;i++)
{
printf("%d ",s[i]);
}
j=0;
while(j<30)
{
if(s[j]==-32767)
{
j++;
continue;
}
for(i=j+1;i<30;i++)
{
if(s[j]==s[i])
{
s[i]=-32767;
}
}
j++;
}
printf("\n目标数组:");
for(i=0;i<30;i++)
{
if(s[i]!=-32767)
printf("%d ",s[i]);
}
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-11-28
#include <stdio.h>
int delDuplicateElement(int a[],int count){
    for (int i = 0; i < count-1; i++) {
        for (int j = i+1; j < count ; j++) {
            if (a[i] == a[j]) {
                for (int k = j; k < count-1; k++) {
                    a[k] = a[k+1]; //如果该数重复,对该数进行覆盖(删除)并count--;
                }
                count--;
            }
        }
    }
    return count;
}

int main(int argc, const char * argv[]) {
    int a[] = {3,2,32,3,23,2,1,21,33,2,3,432,3,32,2};
    int count = sizeof(a)/sizeof(int);
    printf("原数组:");
    for (int i = 0; i < count; i++) {
        printf("%d ",a[i]);
    }
    printf("\n");
    count = delDuplicateElement(a,count);
    printf("删除重复元素后:");
    for (int i = 0; i < count; i++) {
        printf("%d ",a[i]);
    }
    printf("\n");
}

第2个回答  2016-11-28

我可以帮你实现这个程序。实现代码如下:

#include <stdio.h>
#define N 8  //定义一个符号常量
int remove_repeat(int *a, int len)
{
    int i, j, k;
    for(i = 0; i < len; i ++)
    {
        for(j = i+1; j <len;)//对后面每个元素比较,去重。
        {
            if(a[j] == a[i])//发现重复元素。
            {
                for(k = j+1; k<len; k++)//依次前移一位
                    a[k-1] = a[k];
                len--;//总长度减一
j=i+1;
            }
else
j++;
        }
    }
    return len;//返回新的长度值。
}

int main()
{
int a[N];
int i,len;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
len=remove_repeat(a,N);
printf("After remove repeat...\n");
for(i=0;i<len;i++)
printf("%-4d",a[i]);
return 0;
}

示例运行结果:

1 2 2 3 5 5 5 8

After remove repeat...

1   2   3   5   8

2 2 2 3 3 3 3 4

After remove repeat...

2   3   4

本回答被提问者和网友采纳