#include <iostream>
#include <string.h> using namespace std;
char qp[10][10];
int result; //结果
int black_k_x; //将军的x,y
int black_k_y;
int white_k_x;
int white_k_y;
int abs(int i){
if(i<0)
return -i;
return i;
}
//马
bool n_check(int n_x,int n_y,int k_x,int k_y){ if(abs(n_x-k_x)==2&&abs(n_y-k_y)==1)
return true;
if(abs(n_x-k_x)==1&&abs(n_y-k_y)==2)
return true; return false; }
//兵
bool p_check(int p_x,int p_y,int k_x,int k_y){
if(qp[p_x][p_y]=='p'){
if(p_x+1==k_x&&abs(p_y-k_y)==1)
return true;
}
else if(qp[p_x][p_y]=='P'){
if(p_x-1==k_x&&abs(p_y-k_y)==1)
return true;
}
return false; }
//车
bool r_check(int r_x,int r_y,int k_x,int k_y){
int i;
if(r_x==k_x){ //同横
if(k_y>r_y){ //r_y 比较小
for(i=r_y+1;i<k_y;i++)
if(qp[r_x][i]!='.')
break;
if(i==k_y)
return true;
}
if(k_y<r_y){ for(i=k_y+1;i<r_y;i++)
if(qp[r_x][i]!='.')
break; if(i==r_y)
return true; } }
if(r_y==k_y){ //同列
if(k_x>r_x){ //r_x比较小
for(i=r_x+1;i<k_x;i++)
if(qp[i][k_y]!='.')
break;
if(i==k_x)
return true;
}
if(k_x<r_x){ //k_x 比较小 for(i=k_x+1;i<r_x;i++)
if(qp[i][k_y]!='.')
break; if(i==r_x)
return true;
} }
return false; }
//象
bool b_check(int b_x,int b_y,int k_x,int k_y){
int i,j;
//x差和y差相同
if(abs(b_x-k_x)==abs(b_y-k_y)){ //xy同增
i=b_x;j=b_y;
while(i<k_x&&j<k_y){
i++;j++;
if(qp[i][j]!='.')
break;
} //x减y增
while(i>k_x&&j<k_y){ i--;j++;
if(qp[i][j]!='.')
break;
} //x增y减
while(i<k_x&&j>k_y){ i++;j--;
if(qp[i][j]!='.')
break;
} //x减y减
while(i>k_x&&j>k_y){
i--;j--;
if(qp[i][j]!='.')
break;
} if(i==k_x&&j==k_y)
return true; }
return false; }
//后
bool q_check(int q_x,int q_y,int k_x,int k_y){
return r_check(q_x,q_y,k_x,k_y)||b_check(q_x,q_y,k_x,k_y); }
void check(){ bool f;
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++){ if(qp[i][j]=='p'){
f=(p_check(i,j,white_k_x,white_k_y)); }else if(qp[i][j]=='n'){
f=(n_check(i,j,white_k_x,white_k_y)); } else if(qp[i][j]=='q'){
f=(q_check(i,j,white_k_x,white_k_y)); }else if(qp[i][j]=='r'){
f=(r_check(i,j,white_k_x,white_k_y)); }else if(qp[i][j]=='b'){
f=(b_check(i,j,white_k_x,white_k_y)); } if(f==true){ result=1;
return;
} if(qp[i][j]=='P'){
f=(p_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='N'){
f=(n_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='Q'){
f=(q_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='R'){
f=(r_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='B'){
f=(b_check(i,j,black_k_x,black_k_y));
}
if(f==true){ result=0;
return;
} }
result=2; } int main()
{
int run=1; while(true){
bool flag=true; //退出标志 memset(qp,'.',sizeof(qp));
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++){
cin>>qp[i][j];
if(flag&&qp[i][j]!='.')
flag=false;
if(qp[i][j]=='k'){black_k_x=i;black_k_y=j;}
if(qp[i][j]=='K'){white_k_x=i;white_k_y=j;} }
if(flag) break; //空盘退出 check(); //读盘 if(result==0) //结果为0
cout << "Game #"<<run<<": black king is in check." << endl;
else if(result==1)
cout << "Game #"<<run<<": white king is in check." <<endl;
else
cout << "Game #"<<run<<": no king is in check."<<endl; run++; }
return 0;
}

寒假的ACM训练三(PC110107/UVa10196)的更多相关文章

  1. 寒假的ACM训练(一)

    今天开始ACM训练,选择了刘汝佳的<挑战编程>,暂时算是开始了. 测评的网址: http://www.programming-challenges.com 第一个题目是水题啦.3n+1. ...

  2. 2014暑假ACM训练总结

    2014暑假ACM训练总结报告 匆匆之中,一个暑假又过去了,在学校训练的这段日子真的是感觉日子过得好快啊! 时光如箭,日月如梭! 匆忙的学习之中一个暑假就这样结束了,现在就来写一些总结吧,供自己以后阅 ...

  3. 计蒜客 ACM训练联盟周赛 第一场 Christina式方格取数 思维

    助手Christina发明了一种方格取数的新玩法:在n*m的方格棋盘里,每个格子里写一个数.两个人轮流给格子染色,直到所有格子都染了色.在所有格子染色完后,计算双方的分数.对于任意两个相邻(即有公共边 ...

  4. 计蒜客 ACM训练联盟周赛 第一场 从零开始的神棍之路 暴力dfs

    题目描述 ggwdwsbs最近被Zeratul和Kyurem拉入了日本麻将的坑.现在,ggwdwsbs有13张牌,Kyurem又打了一张,加起来有14张牌.ggwdwsbs想拜托你帮他判断一下,这14 ...

  5. 计蒜客 ACM训练联盟周赛 第一场 Alice和Bob的Nim游戏 矩阵快速幂

    题目描述 众所周知,Alice和Bob非常喜欢博弈,而且Alice永远是先手,Bob永远是后手. Alice和Bob面前有3堆石子,Alice和Bob每次轮流拿某堆石子中的若干个石子(不可以是0个), ...

  6. 孤荷凌寒自学python第三十九天python 的线程锁Lock

    孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...

  7. 孤荷凌寒自学python第三十八天初识python的线程控制

     孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看 ...

  8. 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化

    孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...

  9. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

随机推荐

  1. Eclipse无法识别Android真机的解决方法

    使用IORegistryExplorer(在Developer Tool)可以查看连接上的USB设备的信息.选择IOUSB,可以看到名为连线的安卓设备,比如小米idVendor是0x2717. ech ...

  2. 转载: Asp.net常见word,excel,ppt,pdf在线预览方案

    参考链接: http://www.cnblogs.com/wolf-sun/p/3569960.html

  3. extjs的button控件fireEvent('click')无效问题

    extjs的button控件fireEvent('click')无效问题 2012-06-06 16:39 891人阅读 评论(0) 收藏 举报 extjsbuttoncallbackfunction ...

  4. (转)PQ分区魔术师中文版分区教程

    PQ分区魔术师中文版分区的图解,图文并茂很多朋友提到硬盘分区,觉得不敢轻易去尝试,怕得不偿失,深度xp系统下载在此分享下pq分区的图解详见下图: 1)这是用的雨林木风系统的光盘,其他系统盘一样 2)首 ...

  5. ACM2037

    这题采用的是贪心算法,暂不会.

  6. Linux Foundation Secure Boot System Released

    As promised, here is the Linux Foundation UEFI secure boot system.  This was actually released to us ...

  7. PHP开发Apache服务器配置

    照此配置流程,绝对一路畅通,可保无虞. 昨天弄了个PHP小程序,想在本地跑一下测试,可是工作电脑没有安装环境,于是下载了一个wamp,一路畅通,Apache.Mysql.PHP就 全有了.启动wamp ...

  8. NIO组件Selector详解

    Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 下面是 ...

  9. JavaBean以及MVC模式

    JavaBean,  咖啡豆. JavaBean是一种开发规范,可以说是一种技术. JavaBean就是一个普通的java类.只有符合以下规定才能称之为javabean: 1)必须提供无参数的构造方法 ...

  10. Find发帖水王哥

    Find发帖水王 传说贴吧有一大“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子.坊间风闻该“水王”发帖数目超过了帖子总数的一半.如果你有一个当前论坛上所有帖子(包括回帖)的列表,其中帖子作者的 ...