题目:
•三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖 数目超过了帖子数目的一半。
•如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
思想:
由于水贴王发帖过半,所以,将帖子列表从第一个ID开始,两两相邻比较,然后将ID不同的消除,最后剩下的一定是水贴王的ID。
程序代码:
1 #include<iostream> 2 using namespace std; 3 4 void main(){ 5 int arr_List[10]={1,2,4,5,5,5,3,5,5,5};//模拟帖子列表,不同数字代表不同id 6 int front=0,rear=1; //用于比较的指针 7 8 //逻辑运算函数 9 for(int count_List=1 ; count_list<10 ; count_List++ ) { //循环比较 10 if(arr_List[front]!=arr_List[rear])//id不同消除,后续跳过比较 11 { 12 if(front==0) { //判断首指针位置,如果指向数组首元素,则首尾指针前移两位 13 rear++; front=rear; rear++; 14 } 15 else { //否则首指针前移,尾指针后移 16 front--; rear++; 17 } 18 } 19 else{ //id相同首尾指针均向后移动一位 20 front=rear; front++; 21 } 22 } 23 24 cout<<"水王ID为:"<<arr_List[front]<<endl; 25 }
总结:
思路设计来源于灵感,灵感来源于实践,多锻炼编程技巧考虑开销,才能熟能生巧。