c++删除数组中相同的部分只保留一个 帮忙看看问题在哪里 在线等

#include <iostream.h>
void main()
{
int a[10]={1,2,2,2,3,7,5,6,5,9};
int n=10,i,j,k;
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
{
if(a[i]==a[j])
for(k=j;k<n-1;k++)
{ a[k]=a[k+1];
n--;j--;
}
}
for(i=0;i<10;i++)
cout<<a[i];

}

int main()
{
    int a[10]={1,2,2,2,3,7,5,6,5,9};
    int n=10,i,j,k;

    for(i=0;i<n;i++) //n
        for(j=i+1;j<n;j++) // n
        {
            if(a[i]==a[j])
            {
                for(k=j;k<n-1;k++)
                    a[k]=a[k+1];
                n--;  // åªç”¨å‡ä¸€é“
                j--;
            }
        }
    for(i=0;i<n;i++) // n
        cout<<a[i];
    return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-19
方法有问题吧,为什么要用双重循环?
你能给我说说你的思路吗?如果说不清楚,则你的代码就没有意义,如果能说清楚,你自己就能找到问题追问

选定每个数 然后每个数跟它后面的比 如果相同就向前移 n用来标记最终的数组元素个数

追答

你说的有道理,但程序复杂度较高,会出现多次的数据移动!

可是,你题目中,第一层循环中的9和第二层中的10不会变吗?(如果移动了,总个数就变化了啊)

n--;j--; 放到移动循环中,每移动一个数就减一次???


还有输出时,那个循环中的10,最终的个数,不是10啊

换个思路,可以减少数据的移动,效率会高一些。

插入法实现去重:
#include <iostream.h>
void main()
{
int a[10]={1,2,2,2,3,7,5,6,5,9};
int i,j,n;
//以第一个数为基准,逐个向数组中插入新数
for(i=1,n=1;i<10;i++){
for( j=0;j<n;j++ ){  //检查当前n个数中,有无与a[i]重复的
if ( a[j]==a[i] )
break;
}
if ( j>=n ) //没有重复,则将数据存入,n++
a[n++]=a[i];
}
for(i=0;i<n;i++)
cout<<a[i];
}

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网