人大信息學(xué)院2017年夏令營機試題目(二)-皇后攻擊范圍

前言
題目來自:https://wenku.baidu.com/view/943af216ba68a98271fe910ef12d2af90242a8b2.html

第二題:皇后攻擊范圍
題面:在國際象棋中,皇后的攻擊范圍包括所在橫線、所在豎線、所在左上右下對角線和所在右上左下對角線。輸入皇后所在坐標,請輸出該皇后的攻擊范圍。輸入共一行,為一個坐標值,輸出共四行,所在橫線、所在豎線、所在左上右下對角線和所在右上左下對角線各一行。若其中某條線沒有可攻擊范圍則該行空一行,同一行內(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容