水王02

思路:

     水王的发帖量都超过1/2,假设水王的ID为开始第一个发帖人的id,则开始遍历发帖人的id,如果相同则n+1,如果不同则n-1,因为水王的发帖量超过1/2,则n到最后也是大于0的。

步骤:

  1. 可以假设帖子的第一个id是次数最大的,用ID记录,次数用n记录。

  2. 遍历下一个ID,如果跟ID一样,n++,否则,遇到一个挑战,则n--,如果n == 0,下一步就要重复第一步了。

  3.遍历结束,n>0的那个ID就是水王id,他是水王。

同理三个水王的问题也可以如此。

源代码:

#include <iostream>
using namespace std;

void main()
{
    int i,n[3]={0},id[20],ID[3]={0};//n是记录水王id的遍历次数,ID是假设的水王id,id是发帖人id
    cout<<"请输入发帖人id:"<<endl;
    for(i=0;i<20;i++)
    {
        cin>>id[i];
    }
    for(i=0;i<20;i++)
    {//假设第一个id是水王
        if(id[i]==ID[0])
        {
            n[0]++;
        }
        else if(id[i]==ID[1])
        {
            n[1]++;
        }
        else if(id[i]==ID[2])
        {
            n[2]++;
        }
        //重新开始给ID赋值
        else if(n[0]==0)
        {
            n[0]=1;
            ID[0]=id[i];
        }
        else if(n[1]==0)
        {
            n[1]=1;
            ID[1]=id[i];
        }
        else if(n[2]==0)
        {
            n[2]=1;
            ID[2]=id[i];
        }
        //假设错误则记录数减一
        else
        {
            n[0]--;
            n[1]--;
            n[2]--;
        }
    }
    cout<<"三个小水王id分别是:"<<ID[0]<<","<<ID[1]<<","<<ID[2]<<endl;
}

截图:

总结:

  我们在解决问题时,要先找到问题的关键,就像水王问题一样,水王的发帖量超过一半,那么我们就可以从这个方向入手,先假设水王的id为ID计数n为0,给他赋值和其他id比,如果相同,则n+1,如果不同则删除这两个id,因为水王的发帖量超过一半,因此剩下的一定是水王的id,同理三个水王问题其实就是大水王的问题,不要被表面的问题所迷惑,要透过表面看本质。

转载于:https://www.cnblogs.com/liguoshuai/p/5535575.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值