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,完全没想到现在的这个思路。所以发散和开拓思维很重要。

  • 相关阅读:
    文件上传-pubsec-文件上传大小限制
    编写 .gitignore 文件
    Git 创建点开头的文件和目录
    Git 克隆远程仓库到本地
    redis 在 windows 中的安装
    查看数据库字符集和排序规则
    centos 6 和centos 7 系统下vnc配置
    centos 6 下KVM 安装学习之旅
    Centos 下使用VLAN+Bridge 搭建KVM基础网络环境
    centos 6 KVM 网卡桥接配置
  • 原文地址:https://www.cnblogs.com/15732115368zhm/p/4507496.html
Copyright © 2011-2022 走看看