当前位置 博文首页 > standard_input的博客:C. Tic-tac-toe

    standard_input的博客:C. Tic-tac-toe

    作者:[db:作者] 时间:2021-08-27 22:11

    ?传送门

    翻译:

    ?时间限制1秒钟;

    ?内存限制64mb;?

    标准输入输出;

    可以肯定,每个人都对三连棋(井字棋)非常熟悉。它的规则的确非常简单。两个玩家轮流在3×3网格棋盘标记(一个玩家总是画×,另一个画0)那个玩家的三个标记先都在水平线上、垂直线上或对角线上连成一条线那个玩家就获胜了,然后游戏就结束了。如果棋盘满了,但画×的还是画0的都没赢,那一局就平局了。

    首先你要输入一个3×3的棋局,每个单元网格都是空的,或有些X或0占用,你必须找出轮到那个玩家(第一或第二)下了,或输出下面的判决之一。

    illegal(非法的) ?—— ?如果给定的棋盘不会在游戏中出现。
    the first player won(玩家一获胜) ?—— ?给定的棋局刚好玩家一获胜。
    the second player won(玩家二获胜) ?—— ?给定的棋局刚好玩家二获胜。
    draw(平局) ?—— ?如果给定的棋局刚好是一个平局。
    输入

    由三行组成,每行包括“.”“X”“0”(每个格只能有一个大写字母“X”,或有一个数字0)。

    输出

    输出六个判决中的一个: first, second, illegal, the first player won, the second player won 或 draw。

    样例
    输入
    X0X
    .0.
    .X.
    输出
    second

    就是判断横,竖,斜对角有没有三个连在一起同样的就获胜。重点想好不合格的状态。先手的获胜要比后手多一步,后手获胜的话要和先手步数一样等等。一个简单模拟题。

    c++AC代码:

    ?
    #include<bits/stdc++.h>
    using namespace std;
    string grid[3];
    bool win(char x){
    	for(int i=0;i<3;i++){
    		if(grid[0][i]==grid[1][i]&&grid[1][i]==grid[2][i]&&grid[1][i]==x)
    		return true;
    		if(grid[i][0]==grid[i][1]&&grid[i][1]==grid[i][2]&&grid[i][1]==x)
    		return true;
    	}
    	if(grid[0][0]==grid[1][1]&&grid[1][1]==grid[2][2]&&grid[1][1]==x)
    	return true;
    	if(grid[0][2]==grid[1][1]&&grid[1][1]==grid[2][0]&&grid[1][1]==x)
    	return true;
    	return false;
    }
    void dead(){
    	cout<<"illegal";
    	exit(0);
    }
    int main(){
    	for(int i=0;i<3;i++){
    		cin>>grid[i];
    	}
    	int c1=0,c2=0;
    	for(int i=0;i<3;i++){
    		for(int j=0;j<3;j++){
    			if(grid[i][j]=='X'){
    				c1++;
    			}
    			else if(grid[i][j]=='0'){
    				c2++;
    			}
    		}
    	}
    	if(c1-c2>=2){ 
    		dead();
    	} 
    	else if(c2>c1){ 
    		dead();
    	} 
    	else if(win('X')&&c1==c2){ 
    		dead();
    	} 
    	else if(win('0')&&c1==c2+1){ 
    		dead();
    	} 
    	else if(win('X')&&win('0')){ 
    		dead();
    	} 
    	else if(win('X')){
    		cout<<"the first player won";
    		return 0;
    	}
    	else if(win('0')){
    		cout<<"the second player won";
    		return 0;
    	}
    	else if(c1+c2==9){
    		cout<<"draw"<<endl;
    		return 0;
    	}
    	else if(c1==c2+1){
    		cout<<"second"<<endl;
    		return 0;
    	}
    	else
    	cout<<"first"<<endl;
    	return 0;
    } 
    
    ?

    cs
    下一篇:没有了