zoukankan      html  css  js  c++  java
  • 找水王问题

    设计思路

      起初看到这道题第一个想法就是先排序再找出最中间一个ID,但是老师要求时间复杂度是o(n),所以这个思路被放弃。

      高长志同学提出了另一种思路。由于水王的ID出现的次数占总数的一半,所以从头遍历一遍,先存入第一个ID,依次与后面的ID比较,遇到相同的ID,计数器加1;遇到不同的ID,计数器减1,当计数器等于0时,证明前面出现的ID都是成对的,而且可以同时消去,再存入当前的ID,依次循环。循环到最后剩下的ID就是水王。

    源程序代码

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void main()
     5 {
     6     int biao[10],i;
     7     cout<<"请输入ID列表:";
     8     for (i=0;i<10;i++)
     9     {
    10         cin>>biao[i];
    11     }
    12     int a=0,n=0;
    13     for (i=0;i<10;i++)
    14     {
    15         if (n==0)
    16         {
    17             a=biao[i];
    18             n=1;
    19         }
    20         else
    21         {
    22             if (a==biao[i])
    23             {
    24                 n=n+1;
    25             }
    26             else
    27                 n=n-1;
    28         }
    29     }
    30     cout<<"水王是:"<<a<<endl;
    31 }

    运行结果截图

    编程总结

      这个问题要求编程者换一种不同的思路,不能用平常的思路来思考。不同的题目适合不同的数学模型,多培养发散式思维,不能固守一种想法。

  • 相关阅读:
    CHttpFile调试
    关于linux下网络编程socket 转换IP问题 inet_ntoa()
    vc使用SetTimer回调函数
    OpenGL+VC6.0开发环境搭建
    Java StringBuffer和StringBuilder类
    Java String类
    Java 异常处理
    hashcode()和equals()的作用、区别、联系
    抽象类可以继承实体类吗?
    Java 向上造型详解
  • 原文地址:https://www.cnblogs.com/BUANG/p/4507587.html
Copyright © 2011-2022 走看看