课堂测试-找水王

题目:已知帖子数量和ID号,水王的发帖数超过帖子数的一半,要求快速找出水王

设计思想:快速找出就要求算法必须时间复杂度小,本题利用相同则保留不同则消除的思想,快速找出帖子数最多的水王

代码:

#include<iostream>
using namespace std;
#define N 100
int main()
{
    int ID[N];//发帖者ID
    int i,count=0,sw,a;//计数变量,相同次数,水王,帖子的数量
    cout << "**************一起来找水王****************" << endl;
    cout << "输入帖子的数量" << endl;
    cin >> a;
    if (a <= 0)
    {
        cout << "输入的帖子数量不正确,请重新输入" << endl;
        cin >> a;
        while (a < 0)
        {
            cout << "输入的帖子数量不正确,请重新输入" << endl;
            cin >> a;
        }
    }
    cout << "输入发帖者id号:" << endl;
    for (i = 0; i<a; i++)
    {
        cin >> ID[i];
    }
    for (i = 0; i<a; i++)//遍历a次
    {
        if (count == 0)
        {
            sw = ID[i];
            count = 1;
        }
        else
        {
            if (sw == ID[i])//相同则计数加1,不同则减一
            {
                count++;
            }
            else
                count--;
        }
    }
    cout << "水王的id是:" << sw << endl;
    return 0;
}

测试结果:
===== ===== ===== ===== =====
Compiling...
Compiling done.
===== ===== ===== ===== =====
Doing Unit Test Case 01

输入帖子数量:

显示:输入的帖子数量不正确
Done: 01.
===== ===== ===== ===== =====
Doing Unit Test Case 02
输入帖子数量:
10
输入发帖者ID号:
11 23 32 54 23 11 11 11 11 11
水王的ID是:11
Done: 02.

ALL DONE.
===== ===== ===== ===== =====

总结:这次程序实现并不难,但要寻求最快,必须要选取更好的算法,通过这次测试,感觉自己视野打开了,要根据不同问题,自己设计选取最合适的算法。

开发日志:

星期 听课 上网 读书 编程 总计
周一 2 1   1 4
周二          
周三   1     1
周四 2   1   3
周五       2 2

时间记录日志:

日期 开始时间 结束时间 休息时间 工作时间 活动内容
5/17 19:00 21:10 10 120 查资料
5/18 14:00 15:10 10 120 看书
5/19 14:00 17:30 30 180 编程
5/20 14:20 16:20 0 120 编程 写博客

缺陷记录日志:

这次程序思想很重要,一开始自己想的是遍历,后来在老师的提醒下,才明白了更好的算法。

原文地址:https://www.cnblogs.com/lvstudy/p/5513714.html