c/c++ 去除数组中重复的元素
Posted Love丶伊卡洛斯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c/c++ 去除数组中重复的元素相关的知识,希望对你有一定的参考价值。
前言
第一层循环 0 到 len-1,当i为0,第二层循环j为 i+1即1 到 len-1,依次判断是否 num[i] 和 num[j] 相等,如果相等则进入第三次循环,k为 j+1 到 len-1,将重复点 j 后面的所有元素都往前移动 1,并将数组长度 len - 1,j 也 -1(判断向前移动的元素们的第一位,也就是移动后在 j 位上的这个元素,是否还相等。因为 循环已经到了 j,如果 j不减1,则会跳过刚刚向前移动的元素,可能导致忽略的元素仍然重复),我将在结尾展示有无 j-1的效果。
正着来
#include <stdio.h>
int main()
int len = 10;
int i = 0, j = 0, k = 0;
int num[len];
printf("before:");
for(i=0; i<len; i++)
num[i] = (5 * i) % 10 + i;
printf("%d ", num[i]);
printf("\\n");
for(i=0; i<len; i++) //冒泡循环
for(j=i+1; j<len; j++)//从i后的一个元素一直往len-1位置寻找
if(num[j] == num[i]) //如果发现重复
for(k=j+1; k<len; k++)//j+1的位置到len-1的位置
num[k-1] = num[k]; //将后面的数依次赋值给前一个位置
len--; //数组长度-1
j--; //重复点再次进行查重
printf("after: ");
for(i=0; i<len; i++)
printf("%d ", num[i]);
printf("\\n");
return 0;
倒着来找重复元素
for(i=0; i<len; i++) //冒泡循环
for(j=len-1; j>i; j--)
if(num[j] == num[i]) //如果发现重复
if(j == len-1) //如果是最后一个位置,直接len-1,继续循环
len--;
continue;
for(k=j+1; k<len; k++)
num[k-1] = num[k]; //将后面的数依次赋值给前一个位置
len--; //数组长度-1
j - 1 的有无
#include <stdio.h>
void yes(void);
void no(void);
int main()
yes();
no();
return 0;
void yes(void)
printf("****** yes ******\\n");
int len = 10;
int i = 0, j = 0, k = 0;
int num[len];
printf("before:");
for(i=0; i<len; i++)
num[i] = (4 * i) / 10;
printf("%d ", num[i]);
printf("\\n");
for(i=0; i<len; i++) //冒泡循环
for(j=i+1; j<len; j++)//从i后的一个元素一直往len-1位置寻找
if(num[j] == num[i]) //如果发现重复
for(k=j+1; k<len; k++)//j+1的位置到len-1的位置
num[k-1] = num[k]; //将后面的数依次赋值给前一个位置
len--; //数组长度-1
j--; //重复点再次进行查重
printf("after: ");
for(i=0; i<len; i++)
printf("%d ", num[i]);
printf("\\n");
void no(void)
printf("****** no ******\\n");
int len = 10;
int i = 0, j = 0, k = 0;
int num[len];
printf("before:");
for(i=0; i<len; i++)
num[i] = (4 * i) / 10;
printf("%d ", num[i]);
printf("\\n");
for(i=0; i<len; i++) //冒泡循环
for(j=i+1; j<len; j++)//从i后的一个元素一直往len-1位置寻找
if(num[j] == num[i]) //如果发现重复
for(k=j+1; k<len; k++)//j+1的位置到len-1的位置
num[k-1] = num[k]; //将后面的数依次赋值给前一个位置
len--; //数组长度-1
//j--; //重复点再次进行查重
printf("after: ");
for(i=0; i<len; i++)
printf("%d ", num[i]);
printf("\\n");
以上是关于c/c++ 去除数组中重复的元素的主要内容,如果未能解决你的问题,请参考以下文章