zoukankan      html  css  js  c++  java
  • 课堂练习-找水王

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

    解题思路:根据课堂上的讨论,设计应为时间复杂度为O(n)。采用消除法来对问题求解:相邻两个ID若不同即消除,留在最后的一定是水王ID(题目中“发帖数目超过了帖子数目的一半”非常重要)。程序中给出的ID账号假定为10个。

    程序代码:

    #include<iostream.h>
    int main()
    {
        int a[10];
        cout<<"请输入10个id账号:"<<endl;
        for (int k=0;k<10;k++)
        {
            cin>>a[k];
        }
        int temp=a[0];
        int j=1;
        for (int i=1;i<10;i++)
        {    
            if(a[i]==a[0])
                j++;                
            else    
                j--;
            if(j==0)
            {
                temp=a[i+1];
                j=1;
            }
        }
            cout<<"水王的账号id为:"<<temp<<endl;
            return 0;
    }

    程序截图:

     

    思考总结:

       在设计程序中,首先想到的是判断相邻俩ID是否相同,以此为首要条件进行编程。但是并没有达到Id相消的效果,结果越做越乱。打破思维之后,考虑到使用计数的方法。以基数为1、第一个ID为基础,相同累加,不同累减,当其为0时,得出此数相消。在程序的失败中,又重新加深了C的基础语言编程能力,程序成功后,代码也并不是想象之中的那么难。只是没有想到恰当的方法。

  • 相关阅读:
    leetcode 18 4Sum
    leetcode 71 Simplify Path
    leetcode 10 Regular Expression Matching
    leetcode 30 Substring with Concatenation of All Words
    leetcode 355 Design Twitte
    leetcode LRU Cache
    leetcode 3Sum
    leetcode Letter Combinations of a Phone Number
    leetcode Remove Nth Node From End of List
    leetcode Valid Parentheses
  • 原文地址:https://www.cnblogs.com/cainiao1hao/p/4448495.html
Copyright © 2011-2022 走看看