zoukankan      html  css  js  c++  java
  • 软件工程概论---找水王问题

    1,题目:

    三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

    2,思路:

    因为风闻该“水王”发帖数目超过了帖子数目的一半,每次从列表中删除两个不同的ID,那么剩下的ID列表中,“水王”的ID出现次数仍然超过剩余数目的一半,因此每次删除两个不同的ID,直到剩下的所有ID都相同,那么剩下的就是水王的ID。所以所有帖子从第一个帖子开始遍历,定义一个计数变量b,第二个帖子与第一个帖子相比较,如果相同则b+1;如果不相同则b-1。

    3,代码:

    #include<iostream>
    using namespace std;
    
    int find(int* p, int n)
    {
        int a = 0,b=0;
        for (int i = 0; i < n; ++i)
        {
            if (a == 0 || b == 0)
            {
                a = p[i];
                b++;
            }
            else if (p[i] == a)
                b++;
            else
                b--;
        }
        return a;
    }
    int main()
    {
        int i = 0, n, m[100];
        cout << "输入帖子数目:";
        cin >> n;
        cout << "输入所有帖子ID:";
        for (i = 0; i < n; i++)
        {
            cin >> m[i];
        }
        int k = find(m, n);
        cout << "水王的ID是:"<<k<<endl;
        return 0;
    }

    4,截图:

    5,总结:

    一个项目往往有很多要求,我们在思考项目的实现的同时,也要考虑O(n)的最简单方法。

    我们往往执着于第一直觉的被禁锢住思想的解决方法,比如这道题我一开始的思路是分别计数所有的ID,完全没想到现在的这个思路。所以发散和开拓思维很重要。

  • 相关阅读:
    (转载)构建public APIs与CORS
    SpringMVC 参数注入
    java删除文件夹
    idea 自动提示生成 serialVersionUID
    JSP自定义tag
    gradle中使用嵌入式(embedded) tomcat, debug 启动
    spring in action 4th --- quick start
    Date, TimeZone, MongoDB, java中date的时区问题
    spring boot 添加拦截器
    HTTP status code
  • 原文地址:https://www.cnblogs.com/15732115368zhm/p/4507496.html
Copyright © 2011-2022 走看看