You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ruby打印特定奇数边长的矩形图形

解决Ruby打印特定矩形的问题

首先,我们先拆解你给出的示例图案,梳理其中的规律:

先看n=5(奇数)的标准情况

  • 总共有5行,每行5个字符
  • 只有中间一行是全*(带空格分隔)
  • 其他行都是首尾为*,中间用=(带空格分隔)填充

通用实现代码(适配所有奇数n,遵循中间行全*规律)

这个版本可以完美适配任意奇数边长的矩形,逻辑清晰且通用:

def rectangle(n)
  # 先校验输入必须是奇数
  raise ArgumentError, "参数n必须是奇数" unless n.odd?

  # 预定义两种行模式,避免重复拼接
  # 模式A:首尾*,中间用=填充
  pattern_a = "* " + ("= " * (n - 2)) + "*"
  # 模式B:整行全*
  pattern_b = ("* " * (n - 1)) + "*"

  # 计算中间行的索引(从0开始计数)
  middle_index = (n - 1) / 2

  # 逐行输出对应模式
  n.times do |i|
    puts i == middle_index ? pattern_b : pattern_a
  end
end

# 测试n=5
rectangle(5)

运行后输出完全匹配你的示例:

* = = = *
* = = = *
* * * * *
* = = = *
* = = = *

适配你给出的n=7特殊示例

你提供的n=7示例中,全*的行是第3、4、7行(从1开始计数),对应索引2、3、6(从0开始)。我们可以针对性调整条件来满足这个需求:

def rectangle(n)
  raise ArgumentError, "参数n必须是奇数" unless n.odd?

  pattern_a = "* " + ("= " * (n - 2)) + "*"
  pattern_b = ("* " * (n - 1)) + "*"

  n.times do |i|
    case n
    when 5
      puts i == 2 ? pattern_b : pattern_a
    when 7
      # 匹配你给出的n=7示例:索引2、3、6的行全*
      puts (i == 2 || i == 3 || i == 6) ? pattern_b : pattern_a
    else
      # 如果需要扩展到更大的奇数,补充这里的规律即可
      # 比如可以按n=7的逻辑推导:mid_minus_1 = (n-1)/2 -1; mid = (n-1)/2; last_row = n-1
      raise NotImplementedError, "请补充n=#{n}时的全*行规律"
    end
  end
end

# 测试n=7
rectangle(7)

运行后输出完全匹配你的n=7示例:

* = = = = = *
* = = = = = *
* * * * * * *
* * * * * * *
* = = = = = *
* = = = = = *
* * * * * * *

小说明

从你给出的两个示例来看,n=5和n=7的全*行规律没有明显的通用性。如果n=7的示例是笔误,建议采用**中间一行全***的通用逻辑,代码可以无缝适配所有奇数n;如果确实需要特定行是全*,补充统一规律后即可扩展条件判断。

内容的提问来源于stack exchange,提问作者spn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:04:47