【问题标题】:Hollow Square in Grid网格中的空心正方形
【发布时间】:2016-05-14 05:51:36
【问题描述】:

所以我一直在尝试在网格内绘制一个空心正方形。我最初使用“*”字符制作网格,使用宽度为 10 和高度为 5 的二维数组。当从给定的特定坐标更改每个数组值时,我从正方形左上角的坐标绘制正方形。问题是当我打印出来的时候,外面只完成了一半。

在重写部分网格数组时,我是否遗漏了一个条件或过多的条件?谢谢你的帮助。

int main(){
    char grid[5][10];//initialize array that will be row and column
    for(int i=0;i<5;i++){
        for(int j=0;j<10;j++){
            grid[i][j]= '*';
        }//for
    }//for loop to fill grid with asterisk
    cout << "GRID" << endl << endl;
    for(int i=0;i<5;i++){
        for(int j=0;j<10;j++){
            cout << grid[i][j]  ;
        }//for
        cout << endl;
    }//for loop to print grid no shapes inside
    cout << endl << endl;

    int x = 2;
    int y = 3;
    int size = 3;
    char c = 'o';
    //will have a condition here to check if it can fit inside the
    //grid but this is just to test it will be a member function.
    for(int n=x-1;n<x+size-1; n++){
        for(int p=y-1;p<y+size-1; p++){
            if (n == x-1 || n==x+size-1 || p == y-1 || p== y+size-1 ){
                grid[n][p] = c;
            }
            else
                grid[n][p] = '*';
        }//for
    }//for loop to rewrite specific array coordinates with new c
    cout << "Shape inside grid." << endl;
    for(int n=0;n<5;n++){
        for(int p=0;p<10;p++){
            cout << grid[n][p];
        }//for
        cout << endl;
    }//for loop to print new grid
    return 0;
}
/*
This is my output:
**********
**ooo*****
**o*******
**o*******
**********

This is what I need:
**********
**ooo*****
**o*o*****
**ooo*****
**********
*/

【问题讨论】:

    标签: c++ arrays draw


    【解决方案1】:

    问题出在双for 中,您将正方形的边框设置为'o'

    for(int n=x-1;n<x+size-1; n++){
       for(int p=y-1;p<y+size-1; p++){
          if (n == x-1 || n==x+size-1 || p == y-1 || p== y+size-1 ){
             grid[n][p] = c;
          }
          else
             grid[n][p] = '*';
       }
    }
    

    如果我理解清楚,您的意图是遍历正方形的点(for(int n=x-1;n&lt;x+size-1; n++)for(int p=y-1;p&lt;y+size-1; p++)),检查该点是否是边界点(if (n == x-1 || n==x+size-1 || p == y-1 || p== y+size-1 ))和(a)在边界情况下,设置c(即'o'),(b)否则设置'*'

    很好。

    但是您失败了,因为np 的范围从x-1y-1,包括到x+size-1y+size-1排除

    所以n 不能是x+size-1:上限(包括)是x+size-2。而p 不能是y+size-1:上限(包括)是y+size-2

    结论:你的测试应该是

         if (n == x-1 || n==x+size-2 || p == y-1 || p== y+size-2 )
    

    p.s.:对不起我的英语不好

    【讨论】:

    • 对不起,我的想法是对的,我想我只是算错了。非常感谢您的帮助。
    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多