关于筛选相似数的问题?请进
是这样的比如有这几个数
3,4,78,5,18,19,20,77,80,79
我想要设定如果两个数之间相差5就认定为是一个范围的数,并且把这个范围的数求和平均值,最后输出出来。
比如这个例子中。
3,4,5是一组,18,19,20是一组。77,78,79,80是一组.
我希望最后可以自动筛选后输出出 4,20,78.5这样的结果
请问应该如何编写C程序呢??感谢各位了!!
[此贴子已经被作者于2016-4-11 17:44编辑过]
程序代码:#include <stdio.h>
#define N 10 //处理的数字个数
#define M 5 //同组数字的最大差值
//初始化数组元素全为0
void clean(int a[])
{
int i;
for(i=0;i<N;i++)
{
a[i]=0;
}
}
//从小到大排序
void sort(int a[])
{
int i,j,tmp;
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N;j++)
{
if(a[i]>a[j])
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}
}
//输出同级数字及平均值
void display(int a[])
{
int i=0,sum=0;
for(;a[i]!=0;i++)
{
if(i==N) break;
printf("%d ",a[i]);
sum+=a[i];
}
printf("aver=%.3f\n",(float)sum/i);
}
int main()
{
int nums[N]={3,4,78,5,18,19,20,77,80,79};
int a[N]; //存储同组数字
sort(nums);
clean(a);
int i,j=0;
for(i=0;i<N;i++)
{
if(j==0) //同组开头数字
{
a[j]=nums[i];
j++;
continue;
}
if((nums[i]-nums[i-1])<=M)
{
a[j]=nums[i];
j++;
if(i==N-1) display(a); //特殊情况,输出最后一组
}
else //输出同组数据
{
i--; //退一位
j=0;
display(a);
clean(a);
}
}
return 0;
}
