前言
題目來自:https://wenku.baidu.com/view/943af216ba68a98271fe910ef12d2af90242a8b2.html
第二題:皇后攻擊范圍
題面:在國(guó)際象棋中向抢,皇后的攻擊范圍包括所在橫線爷辙、所在豎線、所在左上右下對(duì)角線和所在右上左下對(duì)角線竹椒。輸入皇后所在坐標(biāo)童太,請(qǐng)輸出該皇后的攻擊范圍。輸入共一行胸完,為一個(gè)坐標(biāo)值书释,輸出共四行,所在橫線赊窥、所在豎線爆惧、所在左上右下對(duì)角線和所在右上左下對(duì)角線各一行。若其中某條線沒有可攻擊范圍則該行空一行锨能,同一行內(nèi)按字典序排列扯再。
image.png
解:
#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");
}
結(jié)果:
image.png
image.png