课堂作业05
设计思路:(1)每次删除4个不同的ID(不管是否超过总数1/4的ID),那么,剩下的ID列表中,
原先发帖比例大于1/4的ID所占比例仍然大于1/4。可以通过不断重复这个过程,
把ID总数降低,从而得到问题的答案。
(2)用candidate[3]记录三个候选ID,用Times[3]记录它们的累积次数.
(3)然后遍历整个ID列表,每处理一个ID,若与candidate[i]中的某一个相同,
则Times[i]++,若与三个都不同,则说明找到了四个互不相同的ID,将三个
Times[i]--,也就相当于“删除了四个不同ID”.
(4)若某一个count[i]==0,则更新之。 源代码:
public class FindKingOfWater {
public static void main(String args[])
{
int ID[]={1,2,3,4,1,2,3};
Find(ID);
}
public static void Find(int ID[])
{
int Times[]=new int[3];
int candidate[]=new int[3];
Times[0]=Times[1]=Times[2]=0;
candidate[0]=candidate[1]=candidate[2]=0;
for(int i=0;i<ID.length;i++)
{
if(ID[i]==candidate[0])
{
Times[0]++;
}
else if(ID[i]==candidate[1])
{
Times[1]++;
}
else if(ID[i]==candidate[2])
{
Times[2]++;
}
else if(Times[0]==0)
{
Times[0]=1;
candidate[0]=ID[i];
}
else if(Times[1]==0)
{
Times[1]=1;
candidate[1]=ID[i];
}
else if(Times[2]==0)
{
Times[2]=1;
candidate[2]=ID[i];
}
else
{
Times[0]--;
Times[1]--;
Times[2]--;
}
}
for(int i=0;i<3;i++)
{
System.out.println("水王"+(i+1)+"的ID是:"+candidate[i]);
}
}
}
程序截图:

浙公网安备 33010602011771号