麻将桌绘制 ( 北京理工大学2019年计算机学院小学期程序设计方法与实践)

麻将桌绘制

一年一度的日麻大赛就要开始啦,各位雀士狭路相逢勇者胜。除了赛场上大家的巅峰精彩对决以外,为了增加比赛的观赏性,还需要一个好看的牌桌,那你帮设计师绘制一个牌桌吧。

比赛在一张长为w,宽为h的桌子上进行绘制,为了方便描述,我们进行了以下定义:

我们把桌子可以分成w×h个方格,每个方格的大小为1×1。
我们定义方格的中心点为其坐标。
因此对于每个中心点(x,y),其实际方格范围为x′∈[x−0.5,x+0.5],y′∈[y−0.5,y+0.5]。
点(0,0)在左上角格子的中心。
点(w−1,0)在左下角格子的中心。
点(0,h−1)在右上角格子的中心。
点(w−1,h−1)在右下角格子的中心。
设计师圈出了一个圆和一个正方形,想在这些格子上贴上麻将logo,具体要求如下:

对于圆C,给出它的圆心坐标(xC,yC)和其半径r。当且仅当格子的中心点到半径的距离不超过r时,这个格子会被贴上麻将logo。如下图所示。
对于正方形,按照顺时针顺序给出其一条边的两个顶点坐标(x1,y1),(x2,y2)。当且仅当格子的中心点在这个矩形的边上或内部的时候,这个格子会被贴上麻将logo。给定的边保证和坐标轴平行。如下图所示。

  •  

现在给你这个牌桌的长和宽,以及圆形和矩形的信息,请你帮忙绘制出整张牌桌。如果不需要贴麻将logo的,请输出'∖',否则请输出'/'(不含引号)。你的输出应该保证牌桌的左上角在你输出的第一个字符。

input

输入数据共三行,第一行包括两个整数w,h(10≤w,h≤200),表示麻将桌的长和宽。

第二行包括三个整数xC,yC,r(−100≤xC,yC≤200,0<r≤200),表示圆的圆心和半径。

第三行包括四个整数x1,y1,x2,y2(−100≤x1,y1,x2,y2≤200),表示矩形的两个端点。

output

输出共w行,每行h个字符,为'∖'或'/'(不含引号)。

input

11 11
5 5 5
4 3 4 7

output

\\\\\/\\\\\
\\///////\\
\/////////\
\/////////\
\/////////\
///////////
\/////////\
\/////////\
\/////////\
\\///////\\
\\\\\/\\\\\

注意:对于正方形,按照顺时针顺序给出其一条边的两个顶点坐标(x1,y1),(x2,y2)。需要分4种情况讨论一下。坑QAQ

#include<stdio.h>
#include<iostream>
#include<algorithm> 
using namespace std;
char mp[250][250];
int x,y,r;

int  ok1(int tx,int ty){
    if((tx-(x))*(tx-(x))+(ty-(y))*(ty-(y))<=r*r){
        return 1;
    }else{
        return 0;
    }
}
int main(){
    int w,h;
    
    int x1,y1,x2,y2;
    scanf("%d%d",&w,&h);
    scanf("%d%d%d",&x,&y,&r);
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    for(int i=0;i<=w;i++)
        for(int j=0;j<=h;j++)
            mp[i][j]='\\';
    int flag=0;
    int a1,a2,b1,b2;
    if(x1==x2){
        int dis=abs(y1-y2);
        if(y1<y2){
            a1=x1;b1=y1;
            a2=x1+dis;b2=y2;
        }else{
            a1=x2-dis;b1=y2;
            a2=x1;b2=y1;
        }
    }
    if(y1==y2){
        int dis=abs(x1-x2);
        if(x1<x2){
            a1=x1;b1=y1-dis;
            a2=x2;b2=y2;
        }else{
            a1=x2;b1=y2;
            a2=x1;b2=y1+dis;
        }
    }
    for(int i=0;i<w;i++){
        for(int j=0;j<h;j++){
            int xx=i;
            int yy=j;
            if(ok1(xx,yy)){
                mp[i][j]='/';
            } 
            if(i>=a1&&i<=a2&&j>=b1&&j<=b2){
                mp[i][j]='/';
            }
        }
    }
    for(int i=0;i<w;i++){
        for(int j=0;j<h;j++){
            printf("%c",mp[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

AC代码:

猜你喜欢

转载自www.cnblogs.com/pengge666/p/11494088.html