C++ 怎么删除数组中在重复的数字,我不会用for循环遍历删除,求大神写一下。

2024-12-16 11:11:22
推荐回答(5个)
回答1:

int i, j;
for (i = 0; i < n-1; i++) {
if (a[i] >= 0) { // 假设所有数都应该是非负数
for (j = i+1; j < n; j++) {
if (a[i] == a[j]) {
a[j] = -1; // 设成-1表示应该删除,如果所有数都是正常值,那只好在这里循环删除了
}
}
}
}
i = 0, j = 0;
// 用 j 遍历数组,然后遇到非负数就拷贝到 i 的地方
while (j < n) {
if (a[j] >= 0) {
if (i < j) // 这里是为了避免相同的数拷贝
a[i] = a[j];
i++;
}
j++;
}

回答2:

可以再定义一个空数组b[],循环把a数组的数复制给b,复制前将被复制的数与b数组当前拥有的所有数对比下,相同就不复制,依此类推。

回答3:

#include
void main()
{
int a[]={3,2,4,4,5};
int k,i,j,m;
k=sizeof(a)/sizeof(a[0]) ; //计算数组个数
for(i=0;i<=k-1;i++)
for(j=i+1;j<=k-1;j++)
{
if(a[i]==a[j])
{
m=j;
while(m{
a[m]=a[m+1];
m++;
}
k--;
j--;
}
}
for(i=0;i<=k-1;i++)
{
printf("%d ",a[i]);
}
}
vc++可运行

回答4:

int main(){
int a[]={1,2,4,4,3,8,2,7,2,4};
int t=10;
int i,j,m;
for(i=0;ifor(j=i 1;jif(a[i]==a[j]){
for(m=j 1;mt--;
i--;
break;
}
}
}
for(i=0;iprintf("%d ",a[i]);
}
return 0;
}

回答5:

for(int i=0;iif(i==0){
cout<}
else{
int print=1;
for(int j=i-1;j>=0;j--){
if(a[i]==a[j]) {
print=0;
break;
}
}
if(print==1){
cout<}
}
}
没有在机上实验,不过我的解题思路大概就是这样,应该能行得通,最多稍微调调。
希望能帮到你,有问题可以继续追问