题目描述
大家都玩过游戏谁是卧底吗?这个游戏是这样玩的,参加人员为主持人加n个参赛者,主持人发给各位参赛者一个词语,大部队(n-1个人)拿到相同的一个词语,剩下一个人拿到与之相关的另一个词语,此人即为卧底。游戏规则如下:
1.每个参赛者每轮只能说一句话描述自己拿到的词语(不能直接说出那个词语)。
2.每轮描述完毕,所有参赛的人投票选出怀疑谁是卧底,得票最多的人出局。两个人一样多的话,待定(暂时保留)。若卧底出局,则游戏结束。若卧底未出局,游戏继续。
3.重复上述流程。若卧底撑到最后一轮(场上剩3人时),则卧底获胜,反之,则大部队胜利。
现在需要你编一段C语言的程序,来判断谁该出局。
输入格式
共2行,第1行是一个正整数n(3<n<31),表示参赛选手人数;第2行是n个正整数,表示各个选手给出的卧底的编号(各选手编号为1到n)。
输出格式
只有一行,出局者的编号(测试数据保证有唯一一人出局)
输入样例
7
2 2 3 3 3 4 4
输出样例
3
程序代码:
#include<stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
int A[31] = { 0 };
int i, j, k;
for (i = 0; i < n; i++)
{
scanf("%d", &A[i]);
}
for (i = 0; i < n; i++)
{
for (j = 0; j < i; j++)
{
if (A[j] > A[j + 1])
{
k = A[j];
A[j] = A[j + 1];
A[j + 1] = k;
}
}
}//将编号由大到小排序
int number1 = 1, number2 = 1, m = 1;
for (i = 0; i < n; i++)
{
if (A[i] == A[i + 1])
{
number1 = number1 + 1;
}
if (number1 > number2)//统计票最多的人
{
number2 = number1;
m = A[i];
}
if(A[i]!=A[i+1])
number1 = 1;
}
printf("%d", m);
return 0;
}
本题关键:先排序,后计数。