找水王2
一、题目
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有3个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖 数目超过了帖子数目的四分之一。
如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个三个传说中的水王吗?
二、设计思想
从头到尾遍历帖子列表,每次消四个不同的id,最后剩下的一定是3个小水王。
三、源代码
//找水王2 //王文奇 20132980 2016/5/26 #include<iostream> using namespace std; int main() { int size = 0; int num[3] = { 0 }; //分别用于记录三个小水王的发帖数 int WaterWang[3]; cout << "请输入ID个数:"; cin >> size; int *ID = new int[size]; cout << "请输入ID(请保证三个小水王ID个数大于数量的1/4):" << endl; for (int i = 0; i < size; i++) { cin >> *(ID + i); } //寻找小水王 for (int i = 0; i < size; i++) { if (num[0] == 0) { WaterWang[0] = ID[i]; num[0]++; continue; } if (ID[i] == WaterWang[0]) { num[0]++; continue; } if (num[1] == 0) { WaterWang[1] = ID[i]; num[1]++; continue; } if (ID[i] == WaterWang[1]) { num[1]++; continue; } if (num[2] == 0) { WaterWang[2] = ID[i]; num[2]++; continue; } if (ID[i] == WaterWang[2]) { num[2]++; continue; } for (int j = 0; j < 3; j++) num[j]--; } cout << "水王id为:"; for (int j = 0; j < 3; j++) cout << WaterWang[j] << " "; delete[] ID; return 0; }
四、运行结果
五、总结
这次与上次一样,只不过水王变成了3个,我们不能在两两消除了,我跟同学讨论了下,四四消除才是解决这问题的正解。