题目来源:大工慕课 链接
作者:Caleb Sung
题目要求
功能:删去一维数组中所有重复的数,只保留不同的数。
数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如:一维数组中的数据是: 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。
注意:请勿改动主函数main和其它函数中的任何内容。
题目代码
#include "stdio.h"
#define N 80
int fun(int a[],int n)
{
/*********Begin**********/
/********** End **********/
}
int main()
{
int a[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;
printf("The original data:\n");
for(i=0;i<n;i++) printf("%3d",a[i]);
n=fun(a,n);
printf("\n\nThe data after deleted:\n");
for(i=0;i<n;i++) printf("%3d",a[i]);
printf("\n\n");
return 0;
}
参考解答
像sentinel
的这种变量名老师一看就知道是学过数据结构的,没学过这门课的学生建议在写代码的时候换一个变量名。
int fun(int a[],int n)
{
/*********Begin**********/
int i=0, sentinel;
for(sentinel 0; i<n; sentinel++){
for(i=sentinel+1; i<n; i++){
if(a[i] > a[sentinel]){
a[sentinel+1] = a[i];
break;
}
}
}
return sentinel;
/********** End **********/
}