随堂练习--找水王1

问题:

•三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。

•如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

解题思想:

问题可简化为:在str数组中,存在着0-9数字,其中一个数字的个数超过了50%,找到这个数字。

设计思想:

1、先构建一个有若干个数字的数组,其中水王数字超过50%。

2、将相邻数字匹配,相同则留下,不同则删去。

3、遍历一遍即可找到水王数字。

#include <iostream>
#include <ctime>
#include <string>
using namespace std;
void main()
{
    srand((unsigned)time(0));
    string str = "";
    int Numstr = 1000;       //定义数组长度
    int num=0;                    //记录水王数字个数
    int Shuiwang=rand()%10;  //随机定义水王数字
    while (Numstr!=0)
    {
        if(rand()%10 <= 5)   //  加水王数字
        {
            str+=Shuiwang+48;
            num++;
        }
        else                           //否则 加水王或者其他数字
        {
            str+=rand()%10+48;
        }
        Numstr--;
    }
    cout<<"含水王的数组为:"<<str<<endl;
    cout<<"水王数字的个数为:"<<num<<endl;
    //相邻数字 匹配  相同则复制到str1中
    string str1 = "";
    for(int i=0;i<str.length();i=i+2)
    {
        if(str[i]==str[i+1])
        {
            str1+=str[i];
        }
    }
    cout<<str1<<endl;     //此时str1中  绝大部分都是水王数字

    while(1)
    {
        int a=rand()%str1.length();
        int b=rand()%str1.length();
        int c=rand()%str1.length();
        if(str1[a]==str1[b]&&str1[a]==str1[c])
        {
            cout<<"水王是:"<<str1[a]<<endl;
            break;
        }
    }
}            

运行结果如下:

时间: 2024-08-08 13:49:31

随堂练习--找水王1的相关文章

随堂练习--找水王2

问题描述: 在上一次练习的基础上,大水王消失了,出现了3个小水王,且每个水王发帖的数量都超过1/4.找出3水王 解决思路: 这1次我们可以通过六个变量来推导出三水王,每两个代表一个水王,其中一个表示 ID,另一个用来使用消除法抵消次数,因为每个水王发帖量都超过1/4,所以一遍运行下来,三水王的ID出现次数都不会被抵消 #include<iostream>#include<string>using namespace std; int main(){    string tieba[

课堂练习之找水王

1.设计思想: 主题思路就是删除ID,每当遇到不同的ID,则删除上一个作为对比对象的ID,依次遍历所有的ID,最后剩下的那个一定是水王. 2.代码设计: //找水王,王昭博. #include <iostream> using namespace std; void main() { int num,ID[100]; cout<<"请输入帖子的数量:"; cin>>num; int i; cout<<"请依次输入帖子对应的ID号

个人作业—找水王2

题目要求:              随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID. 据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗? 设计思路:                1.输入总帖子数x 2.定义一个一维数组a[x],为作者id.设置循环输入作者id 3.定义三个小水王,以及其净帖子数 4.再设置一个循环,按照顺序来依次进行比较,如果净帖子数大于0则作者id不变,如果作者id等于0,则将此id作为新的小水王id,如此循环x次 5.最后剩

4月24号周五课堂练习:找水王续

一.题目要求 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半.如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗? 随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID.据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗? 二.设计思路 三.程序代码 #include<

课堂作业找水王2

找水王2: 超级水王没有了.统计结果表明,有3个发帖很多的ID ,他们的发帖数目都超过了帖子总数目N的1/4.你能从发帖ID列表中快速找出他们ID吗? 设计思想: 和上一次的思路同源,如果每次删除四个不同的ID(不管是否包含发帖数目超过总数1/4的ID),那么,在剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4,可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案. 代码实现: package test1; public class F

课堂练习--“找水王续&quot;

设计思路: ①跟上次思路一样,将问题简化成从一个数组中找出出现次数最多的3个数. ②将“两两相消"的思路模式,变成“三一相消” ③初始化time为零,kingid为零,然后按顺序赋值,遇到跟kingid1相同的time1+1,其余两个同样:遇到跟三个都不同的所有time-1. 代码: import java.util.*; public class Findthreenum { public static void main(String[] args) { Scanner input = ne

4月21号周二课堂练习:找水王

一.题目要求 三人行设计了一个灌水论坛.信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子数目的一半.如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗? 二.设计思路 论坛中有多少帖子,有多少个ID都是不清楚的.我们采用类似于消消乐的方法进行处理,具体方法如下:将所有的帖子进行遍历,比较两个帖子的ID.如果两个帖子的ID相同,则将两个帖子丢弃.

找水王(2)

一.题目要求 随着Tan-go的发展,发现,“超级水王”没有了.统-计结-果表-明,有3个发帖很多的ID,他们的 数目都超过了 总数目N的1/4.你能从 ID列表中快速找出他们的ID吗? 二.设计思想 题目的前提条件是3个水王,他们 数都超过了总数1/4,根据上次找水王的思想这次也借用消消乐的想,每次删去4个不同的id,剩下的一定还是符合3个水王的发-帖数都超过1/4: 找到一个不为0的id保存其位置,然后找到第二个不为0且不与第一个相同的id的位置,依次类推,找到第四个.然后把四个赋值为0.循

“找水王”编程实现。

题目: 在一个贴吧里,有一个水王,经常发帖,回帖,整个贴吧,有一半以上是他的帖子,已知有一张帖子清单,含有作者ID,试编写程序,找出水王. 方法: 1.首先以第一个id开始,与下一个id比较,若相同,则与再下一个比较直至两个id不同,然后清空 2.在从现有的id中选择第一个id重复以上步骤 3.重复以上步骤,直至剩余仅有一个id,即为水王 源代码: #include <iostream> #include <fstream> #include <string> usin