要求:
编写函数,函数功能:删去一维数组中所有重复的数,只保留不同的数。 输出主函数原来 元素和删除后的元素。数组中的数已按由小到大的顺序排列,
函数返回删除后数组中数据的个数。
例如:一维数组中的数据是 : 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。
删除后,数组中的内容应该是 : 2 3 4 5 6 7 8 9 10 * /*/
代码详解
int i, j, n = 20, k = 0;
int arr[20] = { 2 ,2, 2 ,3 ,4 ,9,4, 5, 6, 6, 6 ,6 ,7, 7, 8, 9, 9, 10, 10, 10 };
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)//每次都是和i的下一个元素比较比较到最后一个元素
{
if (arr[i] == arr[j]) {//下个元素的值和当前的元素值相等
for (k = j; k < n - 1; ++k)
{
arr[k] = arr[k + 1];//把下下一个元素的值放到的重复的元素下标上,arr[i]就是保留下来的一个值
//即跳过保留下的值把重复的值用下一个值就行填充覆盖
}
n--;//进行完上一次的往前挪的操作进行长度减少
j--;//重新指回上一次元素匹配相等的下标
}
}
}
for (i = 0; i < n; ++i)
printf("%d,", arr[i]);