码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程作业--找水王续

时间:2016-05-23 20:58:18      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

题目要求:

•三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
•如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?(参考核心代码)
•随着论坛的发展,管理员发现水王没有了,但是统计结果表明,有三个发帖很多的ID。据统计他们的发帖数量超过了1/4,你能从发帖列表中快速找到他们吗?
实现思路:
1.还是将问题抽象化,目前有一组数据,其中有大于等于4分之1的数据是一个确定的值,而且这样的确定的值有三个,剩下的不到四分之一的值都不重复。

2.这样就好办了,还是按照第一次找水王的思路来就可以啦,不过这次的返回值是三个,需要用到数组来解决,nTimes 的3个元素分别对应当前遍历过的3个ID出现的 个数。如果遍历中有某个ID不同于这3个当前ID,我们就判断当前3个ID是否有某个的nTimes为0,如果有,那这个新遍历的ID就取而代之,并赋1 为它的遍历数(即nTimes减1),如果当前3个ID的nTimes皆不为0,则3个ID的nTimes皆减去1,这也就是解决本文题的关键了。由于非 水王ID不满总帖数的1/4,与上题思路相同,所遍历ID与当前3个ID不同时,就一同抵消(即3个当前ID的nTimes值减1),最终留下来的3个当 前ID总会是3个超过1/4的水王ID。

代码实现:

 

  1 public class Find {
  2     static int[] ID=new int[100];
  3     int Rand()//生成0-1内的随机数
  4     {
  5         java.util.Random random=new java.util.Random();// 定义随机类
  6         int result=random.nextInt(4);// 返回[0,4)集合中的整数,注意不包括4
  7         return result;
  8     }
  9     void FirstC()//初始化数组;
 10     {
 11         for(int i=0;i<100;i++)
 12         {
 13             if(Rand()==0)
 14             {
 15                 ID[i]=50;//水王一号的ID
 16             }
 17             else if(Rand()==1)
 18             {
 19                 ID[i]=60;//水王二号的ID
 20             }
 21             else if(Rand()==2)
 22             {
 23                 ID[i]=70;//水王三号的ID
 24             }
 25             else
 26             {
 27                 ID[i]=i;
 28             }
 29             
 30         }
 31     
 32     }
 33     void Out()
 34     {
 35         System.out.println("以下是水贴的ID单");
 36         for(int i=1;i<=ID.length;i++)
 37         {
 38             System.out.print(ID[i-1]+" ");
 39             if(i%10==0)
 40             {
 41                 System.out.print("\n");
 42             }
 43         }
 44     }
 45 /*    int Serch()//思想实现部分
 46     {
 47         int candIDate=50;
 48         int ntimes,i;
 49         for(i = ntimes = 0;i<ID.length;i++){
 50           if(ntimes == 0){
 51             candIDate = ID[i];
 52             ntimes = 1;
 53           }
 54           else{
 55             if(candIDate == ID[i])
 56               ntimes ++;
 57             else 
 58               ntimes --;
 59           }
 60         }
 61         return candIDate;
 62     }*/
 63     public static int[]  Serchs(int[] ID)
 64     {
 65         
 66                 if(ID == null) return null;  
 67                 int candate0= 0;  
 68                 int candate1= 0;  
 69                 int candate2= 0;  
 70                 int times0 = 0;  
 71                 int times1 = 0;  
 72                 int times2 = 0;  
 73                 int len = ID.length;  
 74                 for(int i =0;i<len;i++){  
 75                     if(times0==0&&ID[i]!=candate1&&ID[i]!=candate2){  
 76                         candate0=ID[i];  
 77                         times0++;  
 78                     }  
 79                     else if(times1==0&&ID[i]!=candate0&&ID[i]!=candate2){  
 80                         candate1=ID[i];  
 81                         times1++;  
 82                     }  
 83                     else if(times2==0&&ID[i]!=candate0&&ID[i]!=candate1){  
 84                         candate2=ID[i];  
 85                         times2++;  
 86                     }  
 87                     else if(ID[i]!=candate1&&ID[i]!=candate0&&ID[i]!=candate2){  
 88                         times0--;  
 89                         times1--;  
 90                         times2--;  
 91                     }  
 92                     else if(ID[i]==candate0)  
 93                         times0++;  
 94                     else if(ID[i]==candate1)  
 95                         times1++;  
 96                     else if(ID[i]==candate2)  
 97                         times2++;  
 98                 }  
 99                int[] result = {candate0,candate1,candate2};  
100                 return result;  
101             }  
102           
103     @SuppressWarnings("static-access")
104     public static void main(String[] args) {
105         Find a = new Find();
106         a.FirstC();
107         a.Out();
108         int[] results=new int[3];
109         results=a.Serchs(ID);
110         System.out.println("三个水王的ID分别是");
111         for(int i=0;i<3;i++)
112         {
113             System.out.println("第"+(i+1)+"个水王的ID是"+results[i]);
114         }
115         
116     }
117 
118 }

 

运行结果截图:

技术分享

修改水王ID再次运行程序,观察结果:

技术分享

运行结果:

技术分享

 

心得体会:

1.思想非常重要,

2.当遇到再三思索后实在不懂的问题是第一反应应当是"百度一下"当然,先把问题看会在交作业,学到的就是自己的,学习能力也很重要嘛!

 

软件工程作业--找水王续

标签:

原文地址:http://www.cnblogs.com/aishangtaxuefeihong/p/5521227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!