Swift中特定数字图案打印求助:现有代码无法正常运行
Swift 打印指定数字图案问题解决
需求图案
需要打印的数字图案:
N=5 N=4 15 10 14 7 9 4 13 8 6 8 5 3 12 9 5 2 7 6 2 1 11 10 4 3 1
你的代码问题
你写的代码存在语法和逻辑错误:
- Swift 不支持
for n in 15..1, n--这种循环写法,倒序循环需要用stride或者reversed()方法 print函数参数拼写错误(separartor应为separator),且参数用法不符合Swift规范- 代码逻辑没有贴合图案的数字规律,无法生成目标样式
正确实现代码
先分析图案规律:
- 初始数字是前N个自然数的总和:
total = N*(N+1)/2 - 奇数列从上到下数字递减,偶数列从上到下递增
- 第col列仅在row≥col的行中出现,每行包含row个数字
以下是通用实现函数,支持任意N:
func printNumberPattern(for N: Int) { let total = N * (N + 1) / 2 for row in 1...N { var lineComponents = [String]() for col in 1...row { // 计算前col-1列的总数字个数 let sumPrev = (col - 1) * (2 * N - (col - 2)) / 2 let number: Int if col % 2 == 1 { // 奇数列:当前行数字 = 列起始数字 - 行偏移量 number = (total - sumPrev) - (row - col) } else { // 偶数列:当前行数字 = total - 前序总数 - N + 当前行号 number = total - sumPrev - N + row } // 格式化数字保证对齐 lineComponents.append(String(format: "%2d", number)) } // 用三个空格分隔数字并打印 print(lineComponents.joined(separator: " ")) } } // 测试N=5和N=4 print("N=5") printNumberPattern(for: 5) print("\nN=4") printNumberPattern(for: 4)
运行结果
执行代码后输出:
N=5 15 14 7 13 8 6 12 9 5 2 11 10 4 3 1 N=4 10 9 4 8 5 3 7 6 2 1
内容的提问来源于stack exchange,提问作者Ninja G
相关产品推荐
相关产品推荐

