人大信息学院2017年夏令营机试题目(二)-皇后攻击范围

前言
题目来自:https://wenku.baidu.com/view/943af216ba68a98271fe910ef12d2af90242a8b2.html

第二题:皇后攻击范围
题面:在国际象棋中,皇后的攻击范围包括所在横线、所在竖线、所在左上右下对角线和所在右上左下对角线。输入皇后所在坐标,请输出该皇后的攻击范围。输入共一行,为一个坐标值,输出共四行,所在横线、所在竖线、所在左上右下对角线和所在右上左下对角线各一行。若其中某条线没有可攻击范围则该行空一行,同一行内按字典序排列。


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");
}

结果:


image.png
image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容