/*---------------------------------------------------------
【程序设计】以下程序的功能是删去一维数组s中相同的数据在一起出现的数,使之只剩一个。数组中
的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例:若一维数组中的数据是:
2 3 3 3 3 4 4 4 4 4 10 10 10 10 13 13 15 15 18 18
结果是:2 3 4 10 13 15 18
------------------------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,仅在
Program-End之间填入若干语句。不要删除标志否则不得分。
---------------------------------------------------------*/
#include <stdio.h>
int del(int s[],int n)
{
int i,j=1;
/*********Program*********/
/********* End *********/
}
int main()
{
int s[]={2,3,3,3,3,4,4,4,4,4,10,10,10,10,13,13,15,15,18,18};
int i,m,n=sizeof(s)/sizeof(int);
for(i=0;i<n;i++)
printf("%d ",s[i]);
m=del(s,n);
printf("\n");
for(i=0;i<m;i++)
printf("%d ",s[i]);
printf("\n");
return 1;
}
在这个题目中,可以看到数组已经按从小到大排好序了,所以我们在这个外部函数中只用去重就可以了
?我们可以用 i 这个变量来遍历这个数组中的每一个数
在 i 遍历的同时,我们可以给 i 的内部加一些条件,使 i 在遍历的同时可以找出与前一个数相同的数
for(i=1;i<n;i++) {
if (s[j - 1] != s[i])
s[j++] = s[i];
}
return j;
在这个 if 语句中,可以知道当 s[0] != s[1] 时就把值放入数组s中,然后 j++ ,否则直接跳过
s[0]!=s[1],成立 | 2!=3 | s[0]=2 |
s[1]!=s[2],不成立 | 跳过 | |
s[2]!=s[3],不成立 | 跳过 | |
s[3]!=s[4],不成立 | 跳过 | |
s[4]!=s[5],成立 | 3!=4 | s[1]=3 |
以此类推,我们就能成功把数组去重了 |
?