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

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

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


人大信息学院2017年夏令营机试题目(二)-皇后攻击范围_第1张图片
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

结果:


人大信息学院2017年夏令营机试题目(二)-皇后攻击范围_第2张图片
image.png
人大信息学院2017年夏令营机试题目(二)-皇后攻击范围_第3张图片
image.png

你可能感兴趣的:(人大信息学院2017年夏令营机试题目(二)-皇后攻击范围)