每次删除两个不同的数,因此我们可以考虑在遍历数组的时候保存两个值:一个是数组中的一个数字,一个是次数。当我们遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则次数加1。 如果下一个数字和我们之前保存的数字不同,则次数减1。如果次数为零,我们需要保存下一个数字,并把次数重新设为1。
#include <stdio.h>
#include <iostream.h>
//find the king which appear time is more than half of the total number
int findWaterKing(int a[], int len)
{
int cur, num, i;
cur = a[0];
num = 1;
for (i = 1; i < len; i++)
{
if (a[i] != cur)
{
num--;
if (num == 0)
cur = a[i];
}
else
num++;
}
if (num >= 1)
return cur;
else return 0;
}
void main(void)
{
int a[100], i;
i = 0;
printf("please input the ID num:\n");
while (scanf("%d", &a[i]) != EOF)
i++;
int n = findWaterKing(a, i);
printf("The water king is: %d\n", n);
}