前言
题目来自:https://wenku.baidu.com/view/943af216ba68a98271fe910ef12d2af90242a8b2.html
第二题:皇后攻击范围
题面:在国际象棋中,皇后的攻击范围包括所在横线、所在竖线、所在左上右下对角线和所在右上左下对角线。输入皇后所在坐标,请输出该皇后的攻击范围。输入共一行,为一个坐标值,输出共四行,所在横线、所在竖线、所在左上右下对角线和所在右上左下对角线各一行。若其中某条线没有可攻击范围则该行空一行,同一行内按字典序排列。
解:
#include "stdio.h"
void range(int x,char y){
char ys[8];
int xs[8];
int i,j;
int start,end;
for(i=1;i<9;i++)
ys[i-1]='A'-1+i;
for(i=1;i<9;i++)
xs[i-1]=i;
//行
j=y-'A';
for(i=0;i<8;i++)
if(i==x-1)
continue;
else
printf("%c%d ",ys[j],xs[i]);
printf("\n");
//列
i=x-1;
for(j=0;j<8;j++)
if(ys[j]==y)
continue;
else
printf("%c%d ",ys[j],xs[i]);
printf("\n");
//左上右下
start=(7-(x-1))<(y-'A')?(7-(x-1)):(y-'A');
for(i=x-1+start,j=y-'A'-start;i>=0&&j<8;i--,j++)
if(i==x-1||j==y-'A')
continue;
else
printf("%c%d ",ys[j],xs[i]);
printf("\n");
//右上左下
start=x-1<y-'A'?x-1:y-'A';
for(i=x-1-start,j=y-'A'-start;i<8&&j<8;i++,j++)
if(i==x-1||j==y-'A')
continue;
else
printf("%c%d ",ys[j],xs[i]);
printf("\n");
}
void main(){
int x;
char y;
char input[2];
scanf("%c%c",&input[0],&input[1]);
y=input[0];
x=input[1]-'1'+1;
//printf("%c%d",y,x);
range(x,y);
system("pause");
}
结果: