• 麻将桌绘制 ( 北京理工大学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("
    ");
        }
        
        return 0;
    }

    AC代码:

  • 相关阅读:
    《Android 编程权威指南》学习笔记 : 第19章 数据绑定与MVVM
    《Android 编程权威指南》学习笔记 : 第13章 对话框
    《Android 编程权威指南》学习笔记 : 第17章 资源本地化
    《Android 编程权威指南》学习笔记 : 第15章 隐式 intent
    《Android 编程权威指南》学习笔记 : 第18章 Adroid 辅助功能
    《Android 编程权威指南》学习笔记 : 第14章 应用栏
    《Android 编程权威指南》学习笔记 : 第20章 音频播放与单元测试
    《Android 编程权威指南》学习笔记 : 第16章 使用 intent 拍照
    05月31日总结
    05月30日总结
  • 原文地址:https://www.cnblogs.com/pengge666/p/11494088.html
Copyright © 2020-2023  润新知