zoukankan      html  css  js  c++  java
  • 1287 孙武练兵

    1287 孙武练兵

    题目描述

    春秋时代有个伟大的军事家名叫孙武,有一天去见吴王阖闾,吴王问他能不能训练女兵,

    孙武说:“可以。”于是吴王便拨了一百多位宫女给他。孙武把宫女编成队伍,

    用吴王最宠爱的妃子为队长,然后把一些军事的基本动作教给她们,并告诫她们还要遵守军令,

    不可违背。不料孙武开始发令时,宫女们觉得好玩,都一个个笑了起来,...,孙武生气了,便下令把

    队长拖去斩首,理由是队长领导无方。

    之后,宫女终于听话了,虽然队伍还是不怎么整齐,但是对于孙武的号令,是不敢违背了。

    队伍在m*n(0<=20)的练兵场上,0表示空地,1表示宫女,每次操练,孙武有t(t小于10)次号令。 孙武共有8种号令,编号1~8,分别表示队伍向↑、↓、←、→、↖,↙,↗,↘方向移动。

    每一次的号令包括两个数字x(1<=x<=8)和y,分别表示号令的编号和该次号令要移动的距离。

    宫女毕竟是宫女,还是比较难伺候的,如果移动后的坐标↑、↓、←、→有一个方位偏离最初始位置大于5,

    那么宫女就会不听话,发出抗议"X Error"(X为up、down、left、right、up-left,down-left,up-right,down-right之一),

    并留在原地。

    输入要求

    第1行两个整数m、n

    第2行一个整数t

    接下来t行,每行包括2个整数x和y。

    字母的意义如Description中描述。

    输出要求

    如果有抗议现输出抗议,单独一行。

    输出每一次号令后的m*n练兵场范围内的队伍方阵。

    两次号令间空一行

    测试数据

    //输入
    5 5
    0 0 0 0 0
    0 1 1 1 0
    0 1 1 1 0
    0 1 1 1 0
    0 0 0 0 0
    3
    1 2
    1 5
    8 3
    
    //输出
    01110
    01110
    00000
    00000
    00000
    
    up Error
    01110
    01110
    00000
    00000
    00000
    
    00000
    00000
    00001
    00001
    00001
    

    AC代码

    主要为了记录,原谅我懒的写函数,看代码可能会有点累,开大数组的目的是为了省的考虑边界问题

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
    	int res[40][40],in[40][40],n,m,x,y,sumx=0,sumy=0,t,tsumx=0,tsumy=0,cnt=0;
    	string s[9]= {"up","down","left","right","up-left","down-left","up-right","down-right"};
    	memset(res,0,sizeof(res));
    	memset(in,0,sizeof(in));
    	cin>>m>>n;
    	for(int i=6; i<m+6; i++) {
    		for(int j=6; j<n+6; j++) cin>>in[i][j];
    	}
    	cin>>t;
    	while(t--) {
    		if(cnt!=0) cout<<endl;
    		cnt++;
    		cin>>x>>y;
    		tsumx=sumx;
    		tsumy=sumy;
    		if(x==1) tsumx-=y;
    		else if(x==2) tsumx+=y;
    		else if(x==3) tsumy-=y;
    		else if(x==4) tsumy+=y;
    		else if(x==5) tsumx-=y,tsumy-=y;
    		else if(x==6) tsumx+=y,tsumy-=y;
    		else if(x==7) tsumx-=y,tsumy+=y;
    		else if(x==8) tsumx+=y,tsumy+=y;
    		if(abs(tsumx)>5 || abs(tsumy)>5) {
    			cout<<s[x-1]<<" Error"<<endl;
    			for(int i=6; i<m+6; i++) {
    				for(int j=6; j<n+6; j++) cout<<res[i][j];
    				cout<<endl;
    			}
    		} else {
    			sumx=tsumx;
    			sumy=tsumy;
    			for(int i=6; i<m+6; i++) {
    				for(int j=6; j<n+6; j++) res[i][j]=in[i-sumx][j-sumy],cout<<res[i][j];
    				cout<<endl;
    			}
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    H5+ 分享到微信、朋友圈代码示例
    H5+ 重写在线升级版本比较代码
    H5+ a页面打开b页面,b页面加载成功后关闭当前页面,闪屏的规避解决方案
    MUI
    MUI
    MUI
    MUI
    Vue实战之【企业开发常见问题】
    step1:准备歌词之《前端开发是个啥》
    element-ui级联选择器(Cascader)获取级联对象 (主要是想获取:label值)
  • 原文地址:https://www.cnblogs.com/xxhao/p/14318648.html
Copyright © 2011-2022 走看看