zoukankan      html  css  js  c++  java
  • 找水王2

    随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
    条件为:
           在一个数组str中,存在着水王0水王1水王2、及其他用户。其中水王均超过了25%。
    问题为:
           找到水王。
    问题简化为:
          在str数组中,存在着0-9数字,其中三个数字的个数均超过了25%,找到这三个数字。
    设计思想
          1、先构建一个有若干个数字的数组,其中三个水王数字超过25%。
          2、将相邻数字匹配,相同则留下,不同则删去。
          3、在处理后的数组中随机找数字,相同即为水王。
    实验代码
      1 #include <iostream>
      2 #include <ctime>
      3 #include <string>
      4 using namespace std;
      5 string STR()
      6 {
      7     srand((unsigned)time(0));
      8     int Numstr = 1000;   //定义数组长度
      9     int f=1;
     10     while(f)
     11     { 
     12         int num0=0;    //记录水王0数字个数
     13         int num1=0;    //记录水王1数字个数
     14         int num2=0;    //记录水王2数字个数
     15         string str = "";
     16         int Shuiwang0=rand()%10;  //随机定义水王0数字   因为总体人数肯定比10大,现假设定义为10
     17         int Shuiwang1=rand()%10;  //随机定义水王1数字
     18         int Shuiwang2=rand()%10;  //随机定义水王2数字
     19         if(Shuiwang0==Shuiwang1||Shuiwang0==Shuiwang2||Shuiwang1==Shuiwang2)   //三个水王数字不得相同
     20         {
     21             continue;
     22         }
     23         while (Numstr!=0)
     24         {
     25             int F=rand()%40;
     26             if(F <= 11) //  加水王0数字
     27             {
     28                 str+=Shuiwang0+48;
     29                 num0++;
     30                 Numstr--;
     31                 continue;
     32             }
     33             else if(F <= 22) //  加水王1数字
     34             {
     35                 str+=Shuiwang1+48;
     36                 num1++;
     37                 Numstr--;
     38                 continue;
     39             }
     40             else if(F <= 33) //  加水王2数字
     41             {
     42                 str+=Shuiwang2+48;
     43                 num2++;
     44                  Numstr--;
     45                  continue;
     46             }
     47             else             //否则 加水王或者其他数字    
     48             {
     49                 str+=rand()%10+48;
     50                 Numstr--;
     51             }
     52         }
     53         int n=Numstr/4;     
     54         if(num0>n&&num1>n&&num2>n)   //三个小水王的个数 应该都大于1/4
     55         {
     56             cout<<"含水王的数组:"<<str<<endl;
     57             cout<<"水王数字的个数:"<<" "<<Shuiwang0<<" "<<num0<<" "<<Shuiwang1<<" "<<num1<<" "<<Shuiwang2<<"  "<<num2<<endl;
     58             return str;
     59         }
     60     }
     61 }
     62 string Add(string str)
     63 {
     64     //相邻数字 匹配  相同则复制到str1中  
     65     string str1 = "";
     66     for(int i=0;i<str.length()-1;i=i+2)
     67     {
     68         if(str[i]==str[i+1])
     69         {
     70             str1+=str[i];
     71         }
     72     }
     73     return str1;
     74 }
     75 int Search(string str)
     76 {
     77     //其中任取若干 相同则是水王
     78     //此时取3个
     79     int Shuiwang;
     80     while(1)
     81     {
     82         int a=rand()%str.length();
     83         int b=rand()%str.length();
     84         int c=rand()%str.length();
     85         if(str[a]==str[b]&&str[a]==str[c])
     86         {
     87             Shuiwang=str[a]-48;
     88             break;
     89         }
     90     }
     91     return Shuiwang;
     92 }
     93 void main()
     94 {
     95     //构造数组str
     96     string str=STR();
     97     string str1=Add(str);
     98     cout<<str1<<endl;     //此时str1中  绝大部分都是水王数字
     99     int Shuiwang[3];     //存放水王数字的数组
    100     while(1)     
    101     {
    102         Shuiwang[0]=Search(str1);
    103         Shuiwang[1]=Search(str1);
    104         Shuiwang[2]=Search(str1);
    105         if(Shuiwang[0]!=Shuiwang[1]&&Shuiwang[0]!=Shuiwang[2]&&Shuiwang[1]!=Shuiwang[2])  //寻找的三个水王不相同
    106         {
    107             break;
    108         }
    109     }
    110     cout<<"三个小水王为:"<<Shuiwang[0]<<"  "<<Shuiwang[1]<<"  "<<Shuiwang[2]<<endl;
    111 }

    结果截图:

  • 相关阅读:
    Hive的安装和建表
    在MarkDown中插入数学公式对照表(持续更新)
    Beta版本冲刺总汇
    a版本十日冲刺总汇
    “我们只是信息的搬运工”
    调查报告
    Beta版本冲刺第七天
    Beta版本冲刺第六天
    Beta版本冲刺第五天
    Beta版本冲刺第四天
  • 原文地址:https://www.cnblogs.com/L-Damon-v/p/5540099.html
Copyright © 2011-2022 走看看