甲乙用同一串数字玩游戏,一共15个,一开始这些数不是严格升序的,甲去掉一个数据,如果严格升序了,甲胜利,否则由乙继续去掉一个数据,如果严格升序了,乙胜利,否则再由甲删除数据,如此往复。通过15个初始数据,判断甲胜还是乙胜。
#include#include using namespace std;bool sup(list &l)//判断是否严格升序{ if(l.size() == 1) { return true; } else { list ::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 l){ list ::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 l; for(int i=0;i