关于筛选相似数的问题?请进
是这样的比如有这几个数
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; }