甲乙用同一串数字玩游戏

甲乙用同一串数字玩游戏,一共15个,一开始这些数不是严格升序的,甲去掉一个数据,如果严格升序了,甲胜利,否则由乙继续去掉一个数据,如果严格升序了,乙胜利,否则再由甲删除数据,如此往复。通过15个初始数据,判断甲胜还是乙胜。

#include<iostream>
#include<list>

using namespace std;

bool sup(list<int> &l)//判断是否严格升序
{
    if(l.size() == 1)
    {
        return true;
    }
    else
    {
        list<int>::iterator iter1,iter2;
        iter1 = l.begin();
        iter2 = l.begin();
        ++iter2;
        while(iter2!=l.end())
        {
            if(*iter1>=*iter2)
            {
                return false;
            }
            ++iter1;
            ++iter2;
        }
        return true;
    }
}

bool func(list<int>l)
{
    list<int>::iterator iter;
    for(iter=l.begin();iter!=l.end();)//去掉list中的任意一个,看能否严格升序
    {
        int temp = *iter;
        l.erase(iter++);
        if(sup(l))
        {
            return true;
        }
        l.insert(iter,temp);
    }
    for(iter=l.begin();iter!=l.end();)//去掉任意一个都无法严格升序,那么任意去掉一个,看乙能否胜利
    {
        int temp = *iter;
        l.erase(iter++);
        if(!func(l))//乙不能胜利,即甲胜利
        {
            return true;
        }
        l.insert(iter,temp);
    }
    return false;//所有情况下乙都能胜利
}

int main()
{
    int buf[]={4,1,3,2,5};
    list<int>l;
    for(int i=0;i<sizeof(buf)/sizeof(int);i++)
    {
        l.push_back(buf[i]);
    }
    if(func(l))
    {
        cout<<"true"<<endl;
    }
    else
    {
        cout<<"false"<<endl;
    }
    return 0;
}

 

posted @ 2014-08-21 17:08  米其林轮船  阅读(188)  评论(0编辑  收藏  举报