1 条题解
-
0
自动搬运
来自洛谷,原作者为

幻之陨梦
可叹叶飘零,归期未有期搬运于
2025-08-24 22:18:25,当前版本为作者最后更新于2020-03-11 07:59:48,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这道题是一道非常良心的签到题
但我却错了好几次(雾这道题有一个坑点,就是你不能一边读入一边就处理了,我就栽在了这个坑里。处理战车和主教需要用到三重循环,前两重遍历横纵坐标,第三重遍历战车或主教能攻击到的位置,战车和主教每个都用四个单重循环来遍历位置,具体内容参见代码。
//#include<bits/stdc++.h>//万能头文件 #include<iostream> #include<cstdio> #include<algorithm> using namespace std;//标准数据库 char ch[8][8]; bool ans[8][8]; int main() { for(int i=0;i<8;i++) scanf("%s",ch[i]);//现将整个棋盘输入进去 for(int i=0;i<8;i++)//遍历8行 { for(int j=0;j<8;j++)//遍历8列 { if(ch[i][j]=='R')//如果是战车 { ans[i][j]=1;//先将自己站的位置标1 for(int k=i-1;k>=0 && ch[k][j]=='.';k--) ans[k][j]=1;//这个战车的上方不能放国王,所以全都设为1 for(int k=i+1;k<8 && ch[k][j]=='.';k++) ans[k][j]=1;//这个战车的下方也不能放国王,所以也全都设成1 for(int k=j-1;k>=0 && ch[i][k]=='.';k--) ans[i][k]=1;//同理这个战车的z左边也不能放国王 for(int k=j+1;k<8 && ch[i][k]=='.';k++) ans[i][k]=1;//同理这个战车的右边也不能放国王 } else if(ch[i][j]=='B')//如果是主教 { ans[i][j]=1;//先将自己的位置标1 for(int k=i-1,l=j-1;k>=0 && l>=0 && ch[k][l]=='.';k--,l--) ans[k][l]=1;//左上方不能放国王 for(int k=i+1,l=j+1;k<8 && l<8 && ch[k][l]=='.';k++,l++) ans[k][l]=1;//右下方也不能放国王 for(int k=i-1,l=j+1;k>=0 && l<8 && ch[k][l]=='.';k--,l++) ans[k][l]=1;//右上方也不能放国王 for(int k=i+1,l=j-1;k<8 && l>=0 && ch[k][l]=='.';k++,l--) ans[k][l]=1;//左下方也不能放国王 } } } for(int i=0;i<8;i++) { for(int j=0;j<8;j++) printf("%d",!ans[i][j]);//因为上面不行的地方全取的是1,所以输出时取反即可 puts(""); } return 0; }记得留赞呦,Thanks♪(・ω・)ノ
- 1
信息
- ID
- 5204
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者