#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;
}
{
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
方法有问题吧,为什么要用双重循环?
你能给我说说你的思路吗?如果说不清楚,则你的代码就没有意义,如果能说清楚,你自己就能找到问题追问
#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];
}
你能给我说说你的思路吗?如果说不清楚,则你的代码就没有意义,如果能说清楚,你自己就能找到问题追问
选定每个数 然后每个数跟它后面的比 如果相同就向前移 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];
}