Menu
CoddyTech

嵌套循环

本课属于 Coddy R 学习旅程的“基础知识”单元。第 44 课,共 78 课。

你可以在一个循环中再放入另一个循环,创建嵌套循环。外层循环的每次迭代中,内层循环都会完整运行一次,因此处理组合或网格状模式时很有用。

rows <- 3
cols <- 2
for (i in 1:rows) {
  for (j in 1:cols) {
    cat("i =", i, ", j =", j, "\n")
  }
}

输出:

i = 1 , j = 1 
i = 1 , j = 2 
i = 2 , j = 1 
i = 2 , j = 2 
i = 3 , j = 1 
i = 3 , j = 2

对于 i 的每个值,内层循环都会遍历 j 的所有值。当 i 为 1 时,j 从 1 变到 2。然后 i 变为 2,j 又从 1 重新开始,变到 2。rows 和 cols 始终不变:它们只用于告诉循环何时停止。

一个实用示例是创建简单的乘法模式:

for (row in 1:3) {
  for (col in 1:3) {
    cat(row * col, " ")
  }
  cat("\n")
}

输出:

1  2  3  
2  4  6  
3  6  9

外层循环控制行,内层循环处理该行中的每一列。完成每一行后,我们会打印一个换行符,移到下一行。

challenge icon

挑战

简单

从输入中读取两个数字:rows 和 cols。

使用嵌套循环打印一个数字矩形,其中每个单元格的值是其行号与列号之和。行号从 1 到 rows,列号从 1 到 cols。

每行单独打印一行,值之间用一个空格分隔。使用 cat() 输出,并在每行后添加换行符。

例如,如果输入是 3 和 4,输出应为:

2 3 4 5 
3 4 5 6 
4 5 6 7

第一行(第 1 行)的值是 1+1=2、1+2=3、1+3=4、1+4=5。第二行(第 2 行)的值是 2+1=3、2+2=4、2+3=5、2+4=6,以此类推。

cat() 会在你提供的值之间添加一个空格,因此 cat(row + col, "") 会打印数字,后面恰好跟着一个空格。

为每个循环使用一个新的计数器(例如,用 row 表示行,用 col 表示每行中的数字),并将它与 rows 或 cols 进行比较。不要更改 rows 和 cols 本身:每一行都需要再次使用 cols。

亲手试试

# 读取输入
con <- file("stdin", "r")
rows <- as.integer(suppressWarnings(readLines(con, n = 1)))
cols <- as.integer(suppressWarnings(readLines(con, n = 1)))
close(con)

# TODO:在下方编写你的代码
# 使用嵌套循环打印一个矩形,每个单元格的值为行号加列号
# 使用 cat() 打印值,值之间用空格分隔,每行结束后换行
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: R 在线编译器