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