zoukankan      html  css  js  c++  java
  • 课堂练习_水桶

    一、问题描述

        随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。

      据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?

    二、解决思想

        根据上一次水王的方法,我这次试用的还是“消消乐”的方法,不过与上次不同的是,在这次的代码中,计数器变成了三个,

      同时,由一个“水王”,变成了三个“水桶”,思想和上次的一样。

    三、源代码

      

    //田永涛
    //2015.4.25
    #include "stdafx.h"
    #include <stdio.h>
    #define Length 21                //设置最大长度为100
    int MIN(int num[])                //求出count[]中最小的数,以便减1
    {
        int min;
        min = num[1];
        for(int i=1;i<3;i++)
        {
            if(min>num[i])
                min = num[i];
        }
        return min;
    }
    void judge(int Arr[Length])
    {
        int i,j = 0;
        int flag1,flag2,flag3;                        //用来表示水桶
        int count[3] = {0,0,0};                        //用来计录当前水王数目
        flag1 = -1;                                    //初始化水桶
        flag2 = -1;
        flag3 = -1;
        while((flag1==-1)||(flag2==-1)||(flag3==-1))    //while循环做的是将ID表中不相等的最前的三个找出并作为水桶
        {
            if((flag1 == Arr[j])||(flag1 == -1))
            {
                flag1 = Arr[j];
                count[0]++;
            }
            else if((flag2 == Arr[j])||(flag2 == -1)) //将水桶与ID表中的数赋值
            {
                flag2 = Arr[j];
                count[1]++;
            }
            else if((flag3 == Arr[j])||(flag3 == -1))
            {
                flag3 = Arr[j];
                count[2]++;
            }
            j++;                                    //用来计数,记录当前ID表中已经遍历的ID数目
        }
        for(i=j;i<Length;i++)                        //运用“消消乐”的方法,将ID表中的水桶找出
        {
            if(flag1 == Arr[i])                        //当当前ID与已知的水桶相等时
            {
                flag1 = Arr[i];
                count[0]++;
            }
            else if(flag2 == Arr[i])
            {
                flag2 = Arr[i];
                count[1]++;
            }
            else if(flag3 == Arr[i])
            {
                flag3 = Arr[i];
                count[2]++;
            }
            else                            //d当当前的ID与已知水桶的三个ID都不相等时
            {
                if(count[0] == MIN(count))        //找出最小的count,减1
                {
                    count[0]--;
                    if(count[0]<1)
                    {
                        flag1 = Arr[i+1];
                        count[0] = 1;
                        i++;
                    }
                }
                else if(count[1] == MIN(count))
                {
                    count[1]--;
                    if(count[1]<1)
                    {
                        flag2 = Arr[i+1];
                        count[1] = 1;
                        i++;
                    }
                }
                else if(count[2] == MIN(count))
                {
                    count[2]--;
                    if(count[2]<1)
                    {
                        flag3 = Arr[i+1];
                        count[2] = 1;
                        i++;
                    }
                }
            }
        }
        printf("水桶的ID是:%d %d %d
    ",flag1,flag2,flag3);                //输出结果
    }
    int main(int argc, char* argv[])
    {
        int Array[Length] = {1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4};
        printf("ID表中的内容是:
    ");
        for(int i=0;i<Length;i++)
        {
            printf("%d ",Array[i]);
        }
        printf("
    
    ");
        judge(Array);
        return 0;
    }

    四、运行截图

      

    五、总结

        这次的课堂作业和上次的几乎一样,最起码在代码实现的思想上是一样的,但是,我觉得在一些小细节方面还是有所不同的。

      比如:在对水桶flag1,flag2,flag3赋值时,如果采用flag1 = Arr[0],flag2 = Arr[1],...时,显然是不合适的,因为前几个ID

      有可能一样,因此,在代码实现的过程中,我运用了while语句(具体实现方法请看代码),对ID表中最前面不一样的三个赋值,且

      对计数器count[i]进行++,

      这样就能解决问题了。

  • 相关阅读:
    eclipse pom文件报错 org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.Mav (Click for 1 more)
    严重: Compilation error org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
    powercfg -duplicatescheme 设置电源方案
    测试3
    测试2
    markdonwn 测试1
    Java线程池-线程工厂ThreadFactory
    Java线程池-拒绝策略
    一文读懂Base64编码
    ThreadLocal
  • 原文地址:https://www.cnblogs.com/littlechar/p/4456150.html
Copyright © 2011-2022 走看看