游戏

时间: 1ms        内存:128M

描述:

两个玩家玩游戏。最初有n个整数  {a1,a2,,an} ,每轮一个玩家选择一个数字并从中删除,这一直持续到只剩下一个数字。第一个玩家希望留下的最后一个数字最小化,而第二个玩家想要最大化。你想知道在n–1次之后留下什么数字。

输入:

第一行包含一个整数 n(1<=n <=1000)。
第二行包含n个整数。

输出:

输出留下的一个数字

示例输入:

3
2 2 2

示例输出:

2

提示:

参考答案(内存最优[1120]):

#include<stdio.h>
int main()
{
    int i,j,m,n,t;
    int a[10000];
    scanf("%d",&i);
    for(j=1;j<=i;j++)
        scanf("%d",&a[j]);
        for(m=0;m<=i;m++)
            for(n=1;n<=i-1-m;n++)
            if(a[n]>a[n+1])
        {
            t=a[n];
            a[n]=a[n+1];
            a[n+1]=t;
        }
        n=i;
        if((i+1)%2==0)
            printf("%d",a[(n+1)/2]);
        else
            printf("%d",a[n/2]);
}

参考答案(时间最优[2]):

#include <iostream>
#include <algorithm>
using namespace std;


int main()
{
    int n;
    int arr[1005];
    cin >>n;
    for(int i=0;i<n;i++)
        cin >>arr[i];

    sort(arr,arr+n);

    if(n%2==0)
    cout <<arr[n/2-1]<<endl;
    else
        cout <<arr[n/2]<<endl;

    return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。