【问题标题】:Rectangle from numbers, internal numbers are high and external numbers are low, there is a problem with some numbers由数字组成的矩形,内部数字高外部数字低,部分数字有问题
【发布时间】:2021-05-21 15:21:43
【问题描述】:

我有一个练习需要提交。用户应该输入 2 个数字,一个是高度,一个是宽度,输出应该是一个矩形,外面的数字低,里面的数字高。 所以我写了它,但它在某些数字上不起作用,例如 9 和 3,但在大多数情况下它都有效。 我做了2个变量等于用户输入的数字,这个数据下降了,其他2个变量只是指标,循环的,它们没有意义 如果有人有不同的方向怎么做,我很想听听,只是循环..

例如:

1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 2 1
1 2 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1

谢谢

#include <stdio.h>

int main() {
    int row, col, u, d;

    scanf("%d", &row);
    scanf("%d", &col);

    int row_1, col_1;

    for (u = 1, row_1 = row; u <= row; u++, row_1--) {
        for (d = 1, col_1 = col; d <= col; d++, col_1--) {
            if (col_1 < u  && row_1 > col_1)
                printf("%d", col_1);
            else if (u > d && row_1 >= d)
                printf("%d", d);
            else if(row_1 > u)
                printf("%d", u);
            else
                printf("%d", row_1);
        }
        printf("\n");
    }
    return 0;
}

【问题讨论】:

  • 外数低内数高是什么意思?能举个例子吗?
  • 还可以考虑更具描述性地命名您的变量:当rowcol 不是当前行和列而是相同的数量时,现在很难阅读它,我不知道是什么_1 后缀应该意味着,更不用说 ud。使用正确的命名也更容易发现逻辑中的任何错误。
  • 我更正了你所说的

标签: c rectangles


【解决方案1】:

我会从学习描述问题开始。例如:

  • 用户输入要打印的行数和列数(大概各 1-9 个)
  • 对于每个位置,打印到矩形最近边缘的距离,从 1 开始

上述描述很容易导致如下解决方案:

for (int row = 1; row <= num_rows; ++row) {
    int y_distance = distance_to_edge(row, num_rows);
    for (int col = 1; col <= num_cols; ++col) {
        int x_distance = distance_to_edge(col, num_cols);
        printf("%d", x_distance < y_distance ? x_distance : y_distance);
    }
    putchar('\n');
}

distance_to_edge 的实现留作练习。)

当然,这不是唯一的解决方案;您还可以利用您知道位置如何变化的事实(正如您在解决方案中尝试的那样),但这种优化可能会使正确的变得更加困难。一个简单的选择是将每个循环分成两半(距离在前半部分增加,在第二部分减少)......

【讨论】:

  • 在实现distance_to_edge函数后,我可以确认发布的代码有效。
  • (对于那些觉得距离不能从1开始的人,考虑计算距离的边缘是打印区域之外的未打印障碍。=)
猜你喜欢
  • 1970-01-01
  • 2019-08-21
  • 2017-05-27
  • 1970-01-01
  • 2015-03-10
  • 2013-06-08
  • 2019-11-14
  • 1970-01-01
  • 2021-06-13
相关资源
最近更新 更多