寻找发帖“水王”的扩展问题
2013-05-30 21:01
232 查看
#include<stdio.h> #include<stdlib.h> /* 在一个论坛,发现有三个发帖很多的Id ,他们发帖的总数都超过了总数的1/4 ,编程快速的找到这三个id 算法: 每次删除是个不同的Id ,那么最后剩下的 三个Id 就是所求的id */ void findThreeK(int* p,int length) { int candidate[3],nTimes[3]={0,0,0},i; for(i=0;i<length; i++) { if(p[i]==candidate[0]) { nTimes[0]++; } else if(p[i]==candidate[1]) { nTimes[1]++; } else if(p[i]==candidate[2]) { nTimes[2]++; } else if(nTimes[0]==0) { candidate[0]=p[i]; nTimes[0] = 1; } else if(nTimes[1]==0) { candidate[1]=p[i]; nTimes[1] = 1; } else if(nTimes[2]==0) { candidate[2] = p[i]; nTimes[2] = 1; } else { nTimes[0]--; nTimes[1]--; nTimes[2]--; } } for(int i = 0 ; i < 3;i++) printf("%d " ,candidate[i]); } int main() { FILE *fread = fopen("Id.txt","r"); if(fread==NULL) { printf("can't open the file!\n"); exit(0); } int current = 0; // 动态初始化数组 p ,如果不初始化会出现错误 int *p = (int*)malloc(sizeof(int)*10); // id数组的长度 int length = 0 ; // 将 数据读入内存,存入数组P while(fscanf(fread,"%d",¤t)!=EOF) { if(length%10==0) p = (int*)realloc(p , sizeof(int)*(length+10)); p[length] = current; length++; } findThreeK(p,length); /* for(int i = 0 ;i < length ;i++) printf("%d ",p[i]); */ system("pause"); return 0; }
相关文章推荐
- 编程之美 寻找发帖水王 扩展问题
- 《编程之美》寻找发帖水王扩展问题的代码实现
- 寻找发帖水王 扩展问题
- 《编程之美》: 寻找发帖水王的扩展问题 2.3
- 编程之美2.3寻找发帖水王和扩展问题
- 编程之美 2.3寻找发帖‘水王’ 扩展问题
- 编程之美 2.3 寻找发帖水王扩展问题
- 寻找发帖水王扩展问题
- 《编程之美》读书笔记: 寻找发帖水王的扩展问题 2.3
- 寻找发帖“水王”的扩展问题
- 编程之美2.3寻找发帖水王扩展问题
- (1.5.2.3)编程之美 寻找发帖水王 扩展问题
- 寻找发帖“水王” 扩展题
- 寻找水王及其扩展问题
- 寻找发帖"水王" 扩展
- 编程之美 - 寻找灌水王及扩展问题
- 编程之美---快速寻找满足条件的两个数---扩展问题
- 编程之美--发帖水王及扩展问题
- 编程之美 -- 寻找发帖水王,以及扩展题
- 编程之美2.10寻找数组中的最大值和最小值扩展问题Java版