zoukankan      html  css  js  c++  java
  • 找水王续

    随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?

    设计思路:

    概要:三个小水王占总帖子数目的3/4以上,采用变形的二并法

    定义int shui3】,存储小水王,在定义int  num3】,记录三个小水王出现的次数,将帖子中前三个贴主赋值给shui[3],num3】初始为0For循环从第四个帖子开始循环,结束条件,所有的帖子都运算了一次。循环体:判断发帖人是否与shui[3]中相同,如果是,则对应的numi++,否则判断是否有numi】小于0,如果有,则将该发帖人赋值给shuii】,如果numi】中没有小于0的数,则所有的num3】都--,此时判断是否有numi】小于0,如果有,则将该发帖人赋值给shuii

    循环结束后,shui[3]中的值就是三个小水王。。

    代码实现:

     1 //陈昌  20143051 
     2 //2016/05/24 找水王续
     3 #include<iostream>
     4 #include<string>
     5 using namespace std;
     6 void main()
     7 {
     8     string shui[3];//存储水王
     9     int num[3];//记录嫌疑水王的出现的次数
    10     int NUM;
    11     cout<<"请输入:";
    12     cin>>NUM;
    13     string *tie = new string[NUM];//这部分用于从键盘中输入发帖人
    14     //string tie[12]={"a","a","a","a","b","b","b","b","c","c","c","c"};
    15     for(int i=0;i<NUM;i++)
    16     {
    17         cout<<"输入"<<i+1<<"号贴主名:";
    18         cin>>tie[i];
    19     }//这部分用于从键盘中输入发帖人
    20     
    21     for(int i=0;i<3;i++)//初始化
    22     {
    23         shui[i]=tie[i];
    24         num[i]=0;
    25     }
    26 
    27     for(int yi=3;yi<12;yi++)//运算
    28     {
    29         bool piPei=false;//用于判断是否下一个是否匹配
    30         for(int er=0;er<3;er++)//循环匹配判断
    31         {
    32             if(shui[er]==tie[yi])
    33             {
    34                 num[er]++;
    35                 piPei=true;
    36                 break;//匹配,停止循环
    37             }
    38         }
    39         if(!piPei)//匹配不成功
    40         {
    41             bool er=false;//只替换一个shui
    42             bool san=false;//用于判断是否有num【i】<0,有的话直接替换
    43             for(int liu=0;liu<3;liu++)
    44             {
    45                 if(num[liu]<0)
    46                     san=true;
    47             }
    48             if(!san)//没有num【i】<0,所有的num--
    49             {
    50                 for(int san =0;san<3;san++)
    51                     num[san]--;
    52             }
    53             for(int si=0;si<3;si++)
    54             {
    55                 if (num[si]<0&&er==false)//只替换一个shui
    56                 {
    57                     shui[si]=tie[yi];
    58                     num[si]=0;
    59                     er=true;
    60                 }
    61             }
    62         }
    63     }
    64     for(int wu=0;wu<3;wu++)//输出小水王
    65     {
    66         cout<<wu+1<<"号小水王:"<<shui[wu]<<endl;
    67     }
    68 }

    结果截图:

     

    个人总结:

      虽然一开始想到了主要的解题思路,而且也写出了设计思路,但是实际操作起来发现,然并卵,错了,此事并没有停下了整理思路,而是一个劲的寻找错误,到处设立断点,结果然并卵,自己看不下去;于是采用输出语句判断错误,经过一番周折,最终解决了,还是设计思路的问题。。。

  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/cchjl/p/5530098.html
Copyright © 2011-2022 走看看