随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的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 }
结果截图: