首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

数组中为啥不能去掉重复的数

2012-08-24 
数组中为何不能去掉重复的数?# define N 10# includestdio.hvoid main() {void sort(int array[],int n)

数组中为何不能去掉重复的数?
# define N 10
# include<stdio.h>
  void main()
{  
void sort(int array[],int n);
int *quchong(int a[],int n,int *count);
int i,j,a[N],c=0,*q;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
sort(a,N);
printf("the sorted array: \n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
q=quchong(a,N,&c);
printf("去重复数字后: \n");
for(j=0;j<c;j++)
printf("%5d",q[j]);
}
void sort(int array[],int n)
{  
int i,j,k,t;
for(i=0;i<n-1;i++)
{  
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
int *quchong(int a[],int n,int *count)//去重复数函数
{  
int t,s,i,b[N],*p;
t=1;
s=0;
for(i=0;i<n-1;i++)
{  
if(a[i]==a[i+1])
{  
if(t>=2)
continue;
b[s++]=a[i+1];
t++;
++(*count);
}
else
{  
if(a[i]!=a[i+1])
t=1;
b[s++]=a[i+1];
++(*count);
}
}
p=b;
return p;
}


[解决办法]
int *quchong(int a[],int n,int *count)//去重复数函数
应该使用引用,传值应该有问题,改为
int *quchong(int& a[],int n,int *count)//
[解决办法]
b[]数组要开在外面,不能在函数里面,函数执行完内存就释放了

[解决办法]
大概看了一下,以下几个问题
1、b是在子函数里的数组,子函数结束后,b里面的内容应该就是不确定的了。
2、排序算法有问题,for(j=i+1;j<n;j++) 那后面应该加花括号把后面的3条语句给括起来吧。
3、quchong函数里面,else里的b[s++]=a[i+1]; 应该是b[s++]=a[i];吧

[解决办法]
int *quchong(int a[],int n,int *count)//
int t,s,i,b[N],*p;

b[N]为函数quchong内临时数组,函数返回时,临时数组无效。
[解决办法]

C/C++ code
# define N 4# include<stdio.h>int b[N];void main(){       void sort(int array[],int n);    int *quchong(int a[],int n,int *count);    int i,j,a[N],c=0,*q;    for(i=0;i<N;i++)        scanf("%d",&a[i]);    for(i=0;i<N;i++)        printf("%5d",a[i]);    printf("\n");    sort(a,N);    printf("the sorted array: \n");    for(i=0;i<N;i++)        printf("%5d",a[i]);    printf("\n");        q=quchong(a,N,&c);    printf("去重复数字后: \n");    printf("%d\n", c);    for(j=0;j<c;j++)        printf("%5d",q[j]);}void sort(int array[],int n){       int i,j,k,t;    for(i=0;i<n-1;i++)    {           k=i;        for(j=i+1;j<n;j++)            if(array[j]<array[k])                k=j;            t=array[k];array[k]=array[i];array[i]=t;    }}int *quchong(int a[],int n,int *count)//去重复数函数{       int t,s,i,*p;    t=1;    s=0;    b[s++] = a[0];    for(i = 1; i < n; ++i)    {        if(a[i-1] != a[i])        {            b[s++] = a[i];        }    }    *count = s;    p=b;    return p;}
[解决办法]
1,代码最好整理一下。
2,问题最好清晰一下。
[解决办法]
建议楼主写代码时注意一下排版...
------解决方案--------------------


建议楼主写代码时注意一下排版...

热点排行
Bad Request.