• 软工作业 寻找水王 拓展


    一、题目要求

    随着Tan-go的发展,发现,“超级水王”没有了。统-计结-果表-明,有3个发帖很多的ID,他们的 数目都超过了 总数目N的1/4。你能从 ID列表中快速找出他们的ID吗?                      

    二、设计思想

    3个水王,他们 数都超过了总数1/4,每次删去4个不同的id,剩下的一定还是符合3个水王的发-帖数都超过1/4;

    找到一个不为0的id保存其位置,然后找到第二个不为0且不与第一个相同的id的位置,依次类推,找到第四个。然后把四个赋值为0.循环执行上面,知道剩余的id都是水王的id为止

    三、源代码

    #include <iostream.h>
    int find(int id[],int length)//把刚才写的封装成一个函数,以便于多次调用
    {
        int true1=1;
        int xiaoa=0;
        int xiaob=0;
        int xiaoc=0;
        int xiaod=0;
        int n1=0;
        int n2=0;
        int n3=0;
        int n4=0;
        for(int i=0;i<length;i++)
        {
            if(id[i]!=0)//不等于0    
            {
                xiaoa=id[i];
                n1=i;
                i=length;
            }
        }
        for(i=0;i<length;i++)
        {
            if((id[i]!=0)&&(id[i]!=xiaoa))
            {
                xiaob=id[i];
                n2=i;
                i=length;
            }
        }
        for(i=0;i<length;i++)
        {
            if((id[i]!=0)&&(id[i]!=xiaoa)&&(id[i]!=xiaob))
            {
                xiaoc=id[i];
                n3=i;
                i=length;
            }
        }
        for(i=0;i<length;i++)
        {
            if((id[i]!=0)&&(id[i]!=xiaoa)&&(id[i]!=xiaob)&&(id[i]!=xiaoc))
            {
                xiaod=id[i];
                n4=i;
                i=length;
            }
        }
    
    
        //cout<<xiaoa<<" "<<xiaob<<" "<<xiaoc<<" "<<xiaod<<endl;
        //让他们都等于0
        //xiaoa=xiaob=xiaoc=xiaod=0;
        id[n1]=id[n2]=id[n3]=id[n4]=0;
        
        return 0;
    }
    int main(void)
    {
    
        int id[13]={1,2,2,2,2,3,4,3,3,3,4,4,4};
        
        //find(id,13);
    
        //一直重复上面的函数find代码直到数组里面没有四个不同的为止,也就是只剩下3个水王
        int n;//重复的次数
        int sum;//这个帖子总共有多少条
        cout<<"输入总共总共有多少条:";
        cin>>sum;
        n=sum%3;
        //cout<<n<<endl;
        for(int j=0;j<n;j++)
        {
            find(id,sum);
        }
        //把数组中的重复的水王id去掉
    
        //循环把所有数组里面不是0的数输出,就是3个水王
        for(int i=0;i<13;i++)
        {
            if(id[i]!=0)
                cout<<id[i]<<" ";
        }
        cout<<endl;
        cout<<"结果中只有3个,都是水王的id;这个程序还要优化结果输出,和时间复杂度"<<endl;
        return 0;
    
    }

      

    四、结果截图

     

    五、总结

    注意求余符号%和整除符号/的区别使用
    每一个参数尽量命名合 适,必要的时候加上注释,以便于在编写代码的时候思路清晰,也方便以后查看
    代码编写完毕,如果还有想法要 写明,以便于日后查看
    每次编写出一个程序都有一种喜人的成就感,好好享受!
    尽管水平不高,但一直努力!

  • 相关阅读:
    linux tcp中time_wait
    linux查看系统信息
    运行程序出错无法找到库文件
    安装keepalived
    python 深拷贝与浅拷贝
    python import eventlet包时提示ImportError: cannot import name eventlet
    [原创] 用两个queue实现stack的功能
    [原创] 用两个stack实现queue的功能
    [原创] 编写函数,实现对链表元素的排序与分类
    python 装饰器
  • 原文地址:https://www.cnblogs.com/zhaixing/p/4458073.html
Copyright © 2020-2023  润新知