问题:
•三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
•如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
解题思想
寻找水王,简化为在id数组中找出id出现次数超过一半的id,本来自己想着直接遍历一遍,如此时间复杂度会很高,老师给出了较为方便得算法提示,于是得出主要算法思想:在id数组中,如果遇到两个相邻的不相等的数,就删除掉,最后数组中剩下的数就是水王的ID
源代码:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main() 5 { 6 //建立数组 7 string id[100]; 8 int i, k,number; 9 string water_king; 10 cout << "请输入帖子个数:"; 11 cin >> number; 12 cout << "输入发帖id:"; 13 for ( i = 0; i < number; i++) 14 { 15 cin >> id[i]; 16 } 17 18 //删除二者 19 while (id[i] !=id[i+1]) 20 { 21 for (k = i+2; k < number; k++) 22 { 23 id[k - 2] = id[k]; 24 } 25 } 26 //剩余元素为水王id 27 water_king = id[0]; 28 cout << "水王为:"<<water_king; 29 return 0; 30 }
结果:
总结:
一开始没有考虑到如果各个id都是不一样的,那么数组中元素就会被删除完,不设置上限的数组还没看懂,弄明白以后会改正,还望各位同学老师有空时指点一二