标签:
一、设计思路
大致还是和上一个练习相同,也使用了消除法。
定义一个专门用来你叫的ID数组,数量即为水王数量:compareID[],再定义一个用来计数的数组,且初始化都为0:int time[]={0,0,0},然后利用循环,使不同的三个ID储存在compareID[]数组里,然后依次比较,没有相同的ID,对应的计数数组+1,遇到和三个都不相同的ID,则整体计数数组-1,相当于消除,当计数数组重新变为0时,则重新往compareID[]数组里赋下一个ID。最后遍历完后,compareID[]数组便是那三个水王。
二、代码
1 //好水王(多) 2 3 public class KT_523 { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 8 int ID[]={1,4,1,2,2,3,3};//定义ID数组,储存所有ID 9 10 int n=ID.length;//ID数量 11 12 Findmanywaterking(ID,n); 13 14 } 15 16 //定义方法 17 static void Findmanywaterking(int[] ID,int n) 18 { 19 int compareID[]=new int[3];//储存三个不同的ID,用来和其他ID比较 20 int time[]={0,0,0}; //储存比较次数 21 22 //算法 23 for(int i=0;i<n;i++) 24 { 25 if(compareID[0]==ID[i]) 26 { 27 time[0]++; 28 } 29 else if(compareID[1]==ID[i]) 30 { 31 time[1]++; 32 } 33 else if(compareID[2]==ID[i]) 34 { 35 time[2]++; 36 } //储存每个比较ID出现的次数 37 else if(time[0]==0) 38 { 39 compareID[0]=ID[i]; 40 time[0]=1; 41 } 42 else if(time[1]==0) 43 { 44 compareID[1]=ID[i]; 45 time[1]=1; 46 } 47 else if(time[2]==0) 48 { 49 compareID[2]=ID[i]; 50 time[2]=1; 51 } //当计数出现0,则重新赋下一个ID 52 //有和比较ID不同ID则消除,并且在每个计数上减一 53 else 54 { 55 time[0]--; 56 time[1]--; 57 time[2]--; 58 } 59 } 60 //输出打印 61 System.out.print( 62 "三个水王分别是:"+compareID[0]+","+compareID[1]+","+compareID[2]+"。"); 63 } 64 65 }
三、截图
标签:
原文地址:http://www.cnblogs.com/weiyao/p/5534685.html