编写程序,删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
输入
输入数组中元素个数,占一行;输入一组数据,占一行。
输出
输出删除相同数以后的数组,输出占一行
难度
中等
输入示例
19
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
供参考:
#include <stdio.h>
#define N 100
int main()
{
int i, j, n = 19, a[N] = { 2,2,2,3,4,4,5,6,6,6,7,7,8,9,9,10,10,10,10 }, flg;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (flg = a[0], i = 0, j = 0; i < n; i++)
{
if (a[i] - flg)
a[j++] = a[i];
if (i == 0)
a[j++] = a[i];
flg = a[j - 1];
}
for (i = 0; i < j; i++)
printf("%d ", a[i]);
return 0;
}
设置一个apr数组,判断每个数是否出现过,然后一边读入数据,一边把没出现过存入数组A,最后输出数组A即可
#include <stdio.h>
#define N 80
int fun(int a[], int n)
{
int i=0,j=0;
while(i<n)
{
while(a[i+1]==a[i])
{
i++;
}
a[j++]=a[i];
i++;
}
return j;
}
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;void NONO ();
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");
}