甲乙用同一串数字玩游戏,一共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; }