zoukankan      html  css  js  c++  java
  • P2033 Chessboard Dance

     题目简述就是推棋子走棋盘(不能出棋盘),然后经历一系列花里胡哨的操作以后 判断位置

    话不多说 代码如下

    #include<bits/stdc++.h>
    using namespace std;
    char a[10][10];
    char b[6];//操作的前一串
    char c[6];//操作的后一串
    int fangxiang;//你的朝向 1↑ 2↓ 3← 4→
    int x,y;
    void yidong(int x, int y) { //移动
    	if(x<1||x>8||y<1||y>8)
    		return;//到达边界时就不再操作
    	if(fangxiang==1) {
    		if(a[x-1][y])
    			yidong(x-1,y);
    		a[x-1][y]=a[x][y];//替换坐标位置
    		a[x][y]=0;//原来位置化0
    	}
    	if(fangxiang==2) {
    		if(a[x+1][y])
    			yidong(x+1,y);//到达边界时就不再操作
    		a[x+1][y]=a[x][y];//替换坐标位置
    		a[x][y]=0;//原来位置化0
    	}
    	if(fangxiang==3) {
    		if(a[x][y-1])
    			yidong(x,y-1);//到达边界时就不再操作
    		a[x][y-1]=a[x][y];//替换坐标位置
    		a[x][y]=0;//原来位置化0
    	}
    	if(fangxiang==4) {
    		if(a[x][y+1])
    			yidong(x,y+1);//到达边界时就不再操作
    		a[x][y+1]=a[x][y];//替换坐标位置
    		a[x][y]=0;//原来位置化0
    	}
    }
    void move(int n) {
    	if(fangxiang==1) {//上
    		for(int i=1; i<=n; i++) {
    			if(x==1) continue;//到达边界时就不再操作
    			if(a[x-1][y])
    				yidong(x-1,y);
    			x--;
    		}
    	}
    	if(fangxiang==2)//下
    		for(int i=1; i<=n; i++) {
    			if(x==8) continue;//到达边界时就不再操作
    			if(a[x+1][y])
    				yidong(x+1,y);
    			x++;
    		}
    	if(fangxiang==3)//左
    		for(int i=1; i<=n; i++) {
    			if(y==1)continue;//到达边界时就不再操作
    			if(a[x][y-1])
    				yidong(x,y-1);
    			y--;
    		}
    	if(fangxiang==4)//右
    		for(int i=1; i<=n; i++) {
    			if(y==8)continue;//到达边界时就不再操作
    			if(a[x][y+1])
    				yidong(x,y+1);
    			y++;
    		}
    }
    int main() {
    	for(int i=1; i<=8; i++)
    		for(int j=1; j<=8; j++) {
    			cin>>a[i][j];
    			if(a[i][j]=='.')
    				a[i][j]=0;//将“.”清为零,好做以后的操作
    			if(a[i][j]=='^') {
    				x=i;
    				y=j;
    				//记录当前坐标
    				fangxiang=1;
    				//记录当前方向
    				a[i][j]=0;
    				//当前坐标录入后记得清零
    			}
    			if(a[i][j]=='v') {
    				x=i;
    				y=j;
    				fangxiang=2;
    				a[i][j]=0;
    			}
    			if(a[i][j]=='<') {
    				x=i;
    				y=j;
    				fangxiang=3;
    				a[i][j]=0;
    			}
    			if(a[i][j]=='>') {
    				x=i;
    				y=j;
    				fangxiang=4;
    				a[i][j]=0;
    			}
    		}
    	//操作输入
    	while(cin>>b) {
    		if(b[0]=='#')break;
    		if(b[0]=='m') {
    			int n;
    			cin>>n;
    			move(n);//移动
    		} else if(b[0]=='t') {
    			cin>>c;//1↑ 2↓ 3← 4→
    			if(c[0]=='l') {//向左转
    				if(fangxiang==1)
    					fangxiang=3;
    				else if(fangxiang==2)
    					fangxiang=4;
    				else if(fangxiang==3)
    					fangxiang=2;
    				else if(fangxiang==4)
    					fangxiang=1;
    			}
    			if(c[0]=='r') {//向右转
    				if(fangxiang==1)
    					fangxiang=4;
    				else if(fangxiang==2)
    					fangxiang=3;
    				else if(fangxiang==3)
    					fangxiang=1;
    				else if(fangxiang==4)
    					fangxiang=2;
    			}
    			if(c[0]=='b') {//向后转
    				if(fangxiang==1)
    					fangxiang=2;
    				else if(fangxiang==2)
    					fangxiang=1;
    				else if(fangxiang==3)
    					fangxiang=4;
    				else if(fangxiang==4)
    					fangxiang=3;
    			}
    		}
    	}
    	for(int i=1; i<=8; i++) {
    		for(int j=1; j<=8; j++) {
    			if(i==x&&j==y) { //如果a[i][j]是我们现在位置的话
    				if(fangxiang==1)
    					cout<<"^";
    				if(fangxiang==2)
    					cout<<"v";
    				if(fangxiang==3)
    					cout<<"<";
    				if(fangxiang==4)
    					cout<<">";
    				continue;
    			}
    			//如果a[i][j]为空
    			if(a[i][j]==0)
    				cout<<".";
    			//不然a[i][j]就是字母。
    			else cout<<a[i][j];
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    

     一开始在做的时候没有考虑一个问题 所以没有AC 原因如下:

    因为"如果面前有棋子,则将其向前推一步。"

    但是题目没提到的是

    如果你的前面有棋子,棋子的前面也有棋子。

    棋子要一起向前推。

    所以加上一个将棋子的前面的棋子也向前推的函数

    后来加上了 所以就是上面的AC代码了

  • 相关阅读:
    iframe高度自适应方法
    mysql left join对于索引不生效的问题
    禁止百度转码和百度快照缓存的META声明
    使用graphviz绘制流程图
    安装php扩展sphinx-1.2.0.tgz和libsphinxclient0.9.9
    5种主要的编程风格和它们使用的抽象
    Nodejs调用Aras Innovator服务,处理AML并返回AML
    使用Rancher管理Docker
    docker容器间通信
    使用Portainer管理Docker
  • 原文地址:https://www.cnblogs.com/--840-114/p/12723701.html
Copyright © 2011-2022 走看看