不知道咋概括,自己看吧。
程序代码:
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<math.h> #define MAX 10 int names_io(const void *a,const void *b); struct DATA { int dot; int value; }; int main() { int i=0; struct DATA data[MAX]= {0,0}; int olddot[3]={0},check[3]={0}; srand(time(0)); while(1) { for(i=0; i<MAX; i++) //数据一直在变化 { data[i].dot=i; data[i].value=rand()%30; } qsort(&data,MAX,sizeof(struct DATA),names_io); //数据从大到小排序 /***************这部分不知道如何处理*********************/ for(i=0; i<3; i++) { if(olddot[i]==data[i].dot) { check[i]++; } else { olddot[i]=data[i].dot; check[i]=0; } if(check[i]>=10) { /********************* 程序处理部分 **********************/ check[i]=0; } } /************************************************/ } return 0; } int names_io(const void *a,const void *b) { float rs; rs=(*( struct DATA *)b).value-(*( struct DATA *)a).value; if(fabs(rs)<=0.001) return 0; else return rs>0?1:-1; }
现在有10个数据点及相对应的数据,然后使用函数按数据值大小进行排序。现在取排序后最大的三个点的点号与上次得到的最大的三个点的点号进行比较,如果新的数据的三个点号中某个点的值和上一次的三个点中某个点的点号一样,就分别check记录一次,如果连续10次最大的三个点号都有这个点,那么将check清零进入我的程序处理部分。
A B C
a b c d e
就像这样有三个槽,第一次最大的三个值得点号填进去,第二次判断a b c三个点是否是上次的点号,如果是,就check加一,如果不是,就把ABC中abc不存在的点号清除,换成新的点号,并将check清零计数。
[此贴子已经被作者于2020-3-4 20:32编辑过]