找水王2

设计思路:

如果每次删除四个不同的ID,那么,在剩下的ID列表中,原先发帖比例大于1/4的ID所占比例仍然大于1/4,可以通过不断重复这个过程,把ID列表中的ID总数降低(转化为更小的问题),从而得到问题的答案。

程序代码:

#include<iostream>
using namespace std;

void FindID(int ID[],int n,int rightID[]);
void main()
{
    int ID[16] = {1,1,2,2,3,3,3,1,2,3,1,2,3,6};
    int n = 16;
    int waterID[3];

    FindID(ID,n,waterID);

    cout << "符合条件的ID分别是:" << endl;
    for(int i = 0;i < 3;i++)
    {
        cout << waterID[i] << " " << endl;
    }
}

void FindID(int ID[],int n,int waterID[])
{
    int falseID = -1;
    int number[3];
    number[0] = number[1] = number[2] = 0;
    waterID[0] = waterID[1] = waterID[2] = falseID;
    for(int i = 0;i < n;i++)
    {
        if(ID[i] == waterID[0])
        {
            number[0]++;
        }
        else if(ID[i] == waterID[1])
        {
            number[1]++;
        }
        else if(ID[i] == waterID[2])
        {
            number[2]++;
        }
        else if(number[0] == 0)
        {
            number[0] = 1;
            waterID[0] = ID[i];
        }
        else if(number[1] == 0)
        {
            number[1] = 1;
            waterID[1] = ID[i];
        }
        else if(number[2] == 0)
        {
            number[2] = 1;
            waterID[2] = ID[i];
        }
        else
        {
            number[0]--;
            number[1]--;
            number[2]--;
        }
    }
}

结果截图:

个人总结:

将实际问题转化为变量需要很复杂的变换。虽然只遍历了一次数组,但是需要对number,waterID数组比较很多次。这次与上次思路相同,把4个不同的ID相消即可。

时间: 2024-11-09 01:27:11

找水王2的相关文章

课堂练习之找水王

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

随堂练习--找水王2

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

课堂练习--“找水王续&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

软件工程练习——找水王2

随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID.据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗? 设计思想:这次的水王有三个,所以我选择用排除法一个个进行排除,假设第一个ID是水王,用它与之后的其他ID进行比较,对出现的次数进行统计,最后将这个ID全部拿出来,放入另一个数组中(出栈入栈的思想).然后循环这个过程,直到全部水王找出. package shuiwang2; import java.util.*; public class Find_sh