课堂练习之《三个水王》

实验题目

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

实验思路

   跟上一次一样,只不过是计数器由一个变为了三个,定义数组表示它们,由于据统计他们的发帖数量超过了1/4,可将每个水桶ID都与其它水军ID进行抵消最后剩下的就是三个水王,将前三个不同水军ID置为水桶ID,开始抵消计数,“水王”中抵消后数量剩余为0的即被淘汰,用一个最新的水军ID继续进行抵消,最后剩下的即为水桶ID。

代码实现

 1 #include <iostream>
 2 using namespace std;
 3
 4 int main()
 5 {
 6     //首先假定用户的ID列表为一个数组
 7     int Id[30]={1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,1,2,3};
 8     int ShuiW=Id[0];   //默认水王为第一个Id
 9     int length=30;
10     int Idnum[3]={0,0,0};
11     int ID[3]={0,0,0};
12     cout <<"水王ID列表为"<<endl;
13     for(int i=0;i<length;i++)    //输出ID列表
14     {
15         cout<<Id[i]<<" ";
16     }
17     cout<<endl;
18     for(int i=0;i<length;i++)
19     {
20         if(Idnum[0]==0 && Id[i]!=ID[1] && Id[i]!=ID[2])  //第一个水王
21         {
22             Idnum[0]=1;
23             ID[0]=Id[i];
24         }
25         else if(Idnum[1]==0 && Id[i]!=ID[0] && Id[i]!=ID[2])   //第二个水王
26         {
27             Idnum[1]=1;
28             ID[1]=Id[i];
29         }
30         else if(Idnum[2]==0 && Id[i]!=ID[0] && Id[i]!=ID[1])
31         {
32             Idnum[2]=1;
33             ID[2]=Id[i];
34         }
35         else if(Id[i]!=ID[0] && Id[i]!=ID[1] && Id[i]!=ID[2])   //相互抵消,最后抵消为零淘汰,更换新的ID作为水王
36         {
37             Idnum[0]--;
38             Idnum[1]--;
39             Idnum[2]--;
40         }
41         else if(Id[i]==ID[0])
42         {
43             Idnum[0]++;
44         }
45         else if(Id[i]==ID[1])
46         {
47             Idnum[1]++;
48         }
49         else if(Id[i]==ID[2])
50         {
51             Idnum[2]++;
52         }
53     }
54     cout<<"第一个水王的ID是:"<<ID[0]<<endl;
55     cout<<"第二个水王的ID是:"<<ID[1]<<endl;
56     cout<<"第三个水王的ID是:"<<ID[2]<<endl;
57     return 0;
58 }

运行截图

时间: 2024-10-21 13:41:43

课堂练习之《三个水王》的相关文章

软件工程课堂训练———找三个小水王

一.题目描述 随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID.据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗? 二.解决思路 沿用上次消除的思想,定义三个计数器和三个嫌疑水王,比较三个ID,如果不相同,就排除,如果相同,那么计数器加一.嫌疑水王ID都与其它水军ID进行抵消最后剩下的就是三个水王. 三.程序代码 // shuiba.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include &q

?统计学习精要(The Elements of Statistical Learning)?课堂笔记(三)

照例文章第一段跑题,先附上个段子(转载的哦~): I hate CS people. They don't know linear algebra but want to teach projective geometry. They don't know any probability but want to use graphical models. They don't understand stats at all but still do machine learning like c

三个水王

一.题目 随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID.据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗? 二.设计思路 做过找一个水王的的题目,这次找的是三个水王. 1.可以对帖子进行统计,数量最多的三个帖子为水王,但是这需要特别大的空间复杂度,不适用. 2.既然三个水王都大于四分之一,那么,一次消掉4个不同的帖子,最后一定会剩下不同数量的三个水王的帖子, 三.源代码 1 #include<iostream.h> 2 int main() 3

课堂作业值之寻找水王2

随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID.据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗 设计 思想: 与上次寻找水王一样,这次将与三个水王不同的ID都消除掉,剩下的就是三个水王的ID 程序源代码: import java.util.Scanner;public class shuiwang2 { public static void main(String args[]) { Scanner scanner=new Scanner(Syst

课堂练习-找多个水王

一.设计思路 大致还是和上一个练习相同,也使用了消除法. 定义一个专门用来你叫的ID数组,数量即为水王数量:compareID[],再定义一个用来计数的数组,且初始化都为0:int time[]={0,0,0},然后利用循环,使不同的三个ID储存在compareID[]数组里,然后依次比较,没有相同的ID,对应的计数数组+1,遇到和三个都不相同的ID,则整体计数数组-1,相当于消除,当计数数组重新变为0时,则重新往compareID[]数组里赋下一个ID.最后遍历完后,compareID[]数组

软件工程课堂作业(三)——Right-BICEP软件单元测试

一.测试方法:Right-BICEP Right-结果是否正确?B-是否所有的边界条件都是正确的?I-能查一下反向关联吗?C-能用其他手段交叉检查一下结果吗?E-你是否可以强制错误条件发生?P-是否满足性能要求? 二.测试模块:定制打印的题目数 1 //可定制打印的题目数 2 printf("请输入要打印的题目数:"); 3 scanf("%d",&a[0]); 4 while(a[0]<=0) //题目数必须为正数 5 { 6 printf(&quo

软件工程课堂作业(三)——软件单元测试:Right-BICEP

方法:Right-BICEP Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制错误条件发生? P-是否满足性能要求?

Linux课堂随笔第三天

Linux 文件类型 用ls -lh 可以查看某个文件的类型, - 代表是普通文件    d    代表目录   目录 蓝色的 块设备文件  字符b     c代表 字符设备 裸设备 代表没有文件系统或者说绕过文件系统 Linux系统目录 都挂在根目录下 / 可执行文件 Ls   /bin    普通用户命令文件 Ls   sbin     管理使用命令文件 Inode 和目录项 文件数据都储存在块中,那么很显然,还必须有一个地方储存文件元信息,比如文件的创建者.文件的创建日期.文件的长度等.这

课堂笔记(三)

Chapter3 白盒测试 1.白盒测试 白盒测试又称结构测试,它一般用来测试程序的内部结构(Control Flow , Data Flow/控制流,数据流).并判定其结果是否与预期的结果一致. 2.白盒测试的种类 (1)静态分析测试 (2)语句分支覆盖测试 3.控制流测试 利用有向图来进行测试. 4.有向图 用G=(N,E)来表示,其中,N是节点集合:E是边集合, 有向边e=(H(e),T(e))∈E,H(e),T(e)是一对有序的邻接节点,T(e)是尾,H(e)是头.T(e)是H(e)的后