嵌套循环结果

2024-05-19

我真的不知道如何找出嵌套循环的结果。 例如,在下面的伪代码中,我无法弄清楚执行结束时会给出什么。如果有人给我一个简单的解决方案,我会很高兴。

r <- 0
for i <- 1 to n do 
  for j <- 1 to i do
    for k <- j to i+j do
      r <- r + 1
return r

问题是:

代码的结果是什么并给出结果r按照n?

我写它,但每次我都感到困惑。


在你的伪代码中,最内循环,k <- j to i+j可以写成k <- 0 to i (这是通过删除j)。因此,您的代码可以简化如下:

r <- 0
for i <- 1 to n do 
    for j <- 1 to i do
      for k <- 0 to i do   // notice here `j` removed
        r <- r + 1
return r

基于这个伪代码,我编写了一个 C 程序(如下)来生成 N = 1 到 10 的序列。(您最初将问题标记为java /questions/tagged/java但我正在写c /questions/tagged/c代码,因为你想要的东西与语言限制无关)

#include<stdio.h>
int main(){
  int i =0, k =0, j =0, n =0;
  int N =0; 
  int r =0;
  N =10;
  for (n=1; n <= N; n++){
  // unindented code here
  r =0;
  for (i=1; i<=n; i++)
      for (j=1; j<=i; j++)
          for (k=0; k<=i; k++)
              r++;    
  printf("\n N=%d  result = %d",n, r); 
  }
  printf("\n");
}

该程序的输出类似于:

 $ ./a.out     
 N=1  result = 2
 N=2  result = 8
 N=3  result = 20
 N=4  result = 40
 N=5  result = 70
 N=6  result = 112
 N=7  result = 168
 N=8  result = 240
 N=9  result = 330
 N=10  result = 440

然后,尝试探索,它是如何工作的?一些图表:

执行树N=1:

1<=i<=1,              (i=1)
                        |
1<=j<=i,              (j=1)
                      /   \
0<=k<=i,          (K=0)    (K=1)
                   |        |  
r=0                r++      r++    => r = 2
                 ( 1   +    1 )

那是(1*2) = 2

树为N=2:

1<=i<=2,         (i=1)-----------------------(i=2)
                  |                 |---------|------|
1<=j<=i,        (j=1)           (j=1)              (j=2)
                /   \          /  |  \            /  |  \
0<=k<=i,    (K=0)    (K=1)  (K=0)(K=1)(k=2)    (K=0)(K=1)(k=2)
              |        |      |     |    |       |     |    |
r=0          r++      r++   r++   r++  r++     r++   r++  r++    => 8
            --------------  ---------------------------------
            ( 1   +    1)   (     3         +      3        )

That is (1 + 1) + (3 + 3) = 8

同样,我画了一棵树N=3:

1<=i<=3,        (i=1)-----------------------(i=2)--------------------------------------------(i=3)
                  |                 |---------|------|                  |----------------------|----------------------|
1<=j<=3,        (j=1)             (j=1)            (j=2)            (   j=1   )           (   j=2    )           (   j=3    )
                /   \            /  |  \          /  |  \          / |       |  \        / |       |  \          / |       | \
0<=k<=i,    (K=0)   (K=1)    (K=0)(K=1)(k=2)   (K=0)(K=1)(k=2)    /  |       |   \      /  |       |   \        /  |       |  \
              |       |        |    |    |       |    |    |     (K=0)(K=1)(k=2)(k=3)  (K=0)(K=1)(k=2)(k=3)  (K=0)(K=1)(k=2)(k=3)
r=0          r++     r++      r++  r++  r++     r++  r++  r++     r++  r++   r++  r++   r++  r++  r++  r++   r++  r++   r++   r++

That is (1 + 1) + (3 + 3) + (4 + 4+ 4)= 20

N = 1,   (1 + 1) = 2  
N = 2,   (1 + 1) + (3 + 3) = 8  
N = 3,   (1 + 1) + (3 + 3) + (4 + 4 + 4)= 20  
N = 4,   (1 + 1) + (3 + 3) + (4 + 4 + 4) + (5 + 5 + 5 + 5)  =  40  
N = 5,   (1 + 1) + (3 + 3) + (4 + 4 + 4) + (5 + 5 + 5 + 5) + (6 + 6 + 6 + 6 + 6) = 70  
N = 6,   (1 + 1) + (3 + 3) + (4 + 4 + 4) + (5 + 5 + 5 + 5) + (6 + 6 + 6 + 6 + 6) + (7 + 7 + 7 + 7 + 7 + 7)= 112  

对于 N=6,我们也可以将上面的序列写为:

(1*2) + (2*3) + (3*4) + (4*5) + (5*6) + (6*7)    

终于,我能理解这个总和了N三循环中是:

(1*2) + (2*3) + (3*4) + (4*5) + (5*6) + ... + (N * (N+1))

在 math.stackexchange.com 的帮助下,我可以简化这个方程:
我在这里问:如何用N来简化求和方程? https://math.stackexchange.com/questions/416322/how-to-simplify-summation-equation-in-terms-of-n

正如我对你的问题的评论,N 项的结果是( ((N) * (N+1) * (N+2)) / 3 ).
而且,我认为这是正确的。我交叉检查如下:

N = 1,    (1 * 2 * 3)/3  = 2

N = 2,    (2 * 3 * 4)/3 =  8

N = 3,    (3 * 4 * 5)/3 =  20

N = 4,    (4 * 5 * 6)/3 =  40

N = 5,    (5 * 6 * 7)/3 =  70    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌套循环结果 的相关文章

  • 如何仅选择数组中的第一列并对其求和?

    这是我的代码 import numpy as np contrainte1 1080 0 65 minutes tous les jours contrainte2 720 0 55 minutes du lundi au vendredi
  • 无法使用 Python 循环分页 API 响应

    所以 我对这个感到摸不着头脑 使用 HubSpot 的 API 我需要获取我客户的 门户 帐户 中所有公司的列表 遗憾的是 标准 API 调用一次只能返回 100 家公司 当它返回响应时 它包含两个参数 使分页响应成为可能 其中之一是 ha
  • 查找前 N 个五边形数

    我必须找到第一个N pentagonal numbers 1 从 1 100 并每行显示 10 个 我必须使用getPentagonalNumber int n 方法也是如此 显然这就是它存在的原因 到目前为止 这是我的代码 package
  • 如何实现再次播放功能?

    我希望在游戏结束时得到提示 如果我还想再玩一次的话 并使用 Y N 输入 退出游戏或重复游戏 我该如何以最有效的方式解决这个问题 编辑 描述资源路径位置类型 类型 Main Main java ScaredyCat src se grupp
  • 在Python中退出while循环[重复]

    这个问题在这里已经有答案了 在下面的代码中 我想要while循环退出一次a b c 1000 然而 测试与print声明显示它只会持续到for循环完成 我试过了while True然后在if语句集False但这会导致无限循环 我想用x 0然
  • 在 C++ 中,为什么我们不能使用 > 和 < 来比较迭代器? [复制]

    这个问题在这里已经有答案了 我被问过这个问题 我真的不知道为什么 如果你有指针int x 您可以将指针与 gt and lt 因为它代表内存位置 例如0x0000 0x0004 0x0008等等 我知道迭代器和指针是不同的 但它们的行为方式
  • 循环访问多个 CSV 文件并生成多个输出

    我正在编写一些 python 脚本 它打开 csv 文件 定义数据帧 运行一些分析 例如聚合数据 拆分列 查找平均值等 并将分析的输出绘制在图表上 输出将是一个图形 png 文件 和一个 csv 文件 并在原始文件名末尾添加单词 ANALY
  • 如何一次运行多个后台线程任务?

    我正在尝试循环遍历包含 2016 年 10 月日期的 String 对象数组 这意味着 31 个 String 对象 2016 年 10 月 1 日 2016 年 10 月 31 日 对于每个对象 我想从数据库检索一些数据并附加返回值 也是
  • 用另一个文件的标签为图表(ggplot2)中的标题添加下标

    在我的程序中 我有两个主要文件 第一个包含数据 第二个包含标签 或图形标题 文件总数1 数据 3 10000 3 32039232 1 0 0017290351 2 0 0002781092 3 10001 3 32101193 1 0 0
  • 如何将 2 数组放入配置(.ini)文件中? [复制]

    这个问题在这里已经有答案了 我有这个简单的 VBScript 基本代码 Dim cars cars Array Volvo Saab BMW Dim fruits fruits Array Apple Orange Banana Dim i
  • 基于范围的 for 的表达式和声明中具有相同名称的标识符

    在基于范围的 for 循环中声明与循环表达式语句中使用的名称相同的循环变量是否合法 我希望这个例子能够清楚地说明这一点 include
  • 如何循环访问 WPF StackPanel 静态项目?

    可能很容易 但我很难弄清楚这一点 谷歌似乎也没有多大帮助 如何循环遍历 StackPanel 的静态声明元素 无数据绑定 元素在 xaml 中声明 任何帮助表示赞赏 你的意思是StackPanel的孩子们 foreach var child
  • 循环列表的值[重复]

    这个问题在这里已经有答案了 我是编码新手 正在尝试编写一个简单的代码 该代码将采用一个列表 例如 1 2 3 并循环元素 n 次 所以如果n 1 我应该得到A 3 1 2 如果n 2 我应该得到A 2 3 1 我写的代码是 n 1 j 0
  • java交叉连接两个列表

    我有一个 ABC 类 其中包含两个整数字段 public class ABC private Integer x private Integer y getters and setters 我有两个列表 xValues 和 yValues
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 在循环中使用 if 语句? - 加工

    假设我必须在 for 循环中使用 if 语句 并且 for 循环在特定条件下触发 而 if 语句仅在 for 循环达到特定阶段时触发 例如 条件是一个计数器 当发生特定事件 例如球从屏幕上掉下来 时 该计数器会进行计数 每次球穿过屏幕时 都
  • 使用 for 循环读取文件时跳过行

    我试图找出一种方法 如果第一行中的条件为真 则跳过文件中的接下来两行 有什么好的方法可以做到这一点吗 这是我到目前为止所拥有的 def main file open r C Users test Desktop test2 txt r ct
  • 批处理文件 FOR/f 扩展

    我有一个文件 directories txt 与目录名称 每个在一行上 我喜欢扩展该行 C Documents and Settings USERNAME My Documents 在我的脚本中以真实用户名运行脚本 然而 回声与线路完全相同
  • JavaScript 中最长的通用前缀

    我正在尝试解决 Leet Code 挑战14 最长公共前缀 https leetcode com problems longest common prefix 编写一个函数来查找字符串数组中最长的公共前缀字符串 如果没有公共前缀 则返回空字
  • 如何分割字符串并在ant脚本的for循环中使用它?

    我在 ant 属性中有一个机器 IP 列表

随机推荐

  • XAML 构建的本地 TFS 到 VSTS 迁移

    目前 我们在本地使用 TFS 2017 update 1 但我们必须在 VSTS 云平台上迁移 TFS 此外 我们还使用自定义构建模板在本地使用 TFS 构建服务器进行 XAML 构建 我们的问题是迁移后所有 XAML 构建定义是否都能正常
  • Android 启动器快捷方式

    我制作了一个简单的打卡 打卡时钟应用程序 我想向用户添加在主屏幕上创建快捷方式的选项 该快捷方式将切换应用程序的状态 超时 超时 但我根本不希望此快捷方式在屏幕上打开应用程序 这是我的 setupShortcut private void
  • 如何使用网格分割图像并保留透明度边界框

    我有一些 png 图像 我想将其分成几个部分 例如按网格或大小 但每个部分应具有与原始图像相同的边界框 透明度 Example 将图像分成两部分 原来的 200 89 Output 部分 1 png 200 89 第2部分 png 200
  • 执行 `EXECUTE IMMEDIATE ` Oracle 语句出现错误

    我是 Oracle 的新手 当我执行以下语句时 BEGIN EXECUTE IMMEDIATE SELECT FROM DUAL END 我得到错误为 命令中从第 2 行开始出错 立即开始执行 从双选择 结尾 错误报告 ORA 00911
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 带有 Core Data 对象的动态 UITableView 高度

    过去几天我一直在试图解决一个谜团 即为什么我的批处理大小为 20 的 NSFetchedResultsController 总是在获取完成后立即错误 即加载到内存中 我的所有对象 从而导致请求需要约 20 秒 事实证明 这是因为在我的 he
  • SimaPro 项目中参数不确定的活动的蒙特卡罗 LCA 返回恒定值(无不确定性)

    我从 SimaPro 导入了一个项目 其中几乎每个活动都使用具有不确定性的参数 当我在 Brightway 中对其中任何一个运行蒙特卡洛 LCA 时 结果都是恒定的 就好像数量没有不确定性一样 代码片段显示 10 个步骤 但对于 2000
  • MediaCodec 创建输入表面

    我想使用 MediaCodec 将 Surface 编码为 H 264 使用 API 18 有一种方法可以通过调用 createInputSurface 然后在该表面上绘图来对表面中的内容进行编码 我在 createInputSurface
  • 增加雷达图中长轴标签的空间

    我想创建一个雷达图ggirahExtra ggRadar 问题是我的标签很长并且被剪掉了 我想我可以通过添加在标签和绘图之间创建更多空间margin margin 0 0 2 0 cm to element text in axis tex
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 在 Flutter 中显示 iOS 的 PDF 内联文件

    我正在 flutter 中专门为 iOS 开发一个应用程序 现阶段 我需要向其中添加 PDF 文件 问题是 flutter 没有原生的方式来显示 PDF 文件 据我研究 由此tread https github com flutter fl
  • Text::平衡和多行 xml

    看来我有点失落了 我需要解析一个大的 大约 100 mb 且相当难看的 xml 文件 如果我使用parsefile 它返回错误 文档元素后的垃圾 但它会很乐意解析文件的较小元素 所以我决定将文件分解为元素并解析它们 由于不鼓励使用正则表达式
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • nodemon 安装错误“没有可用于超时的有效版本”

    尝试在全新的节点项目中安装 nodemon 时出现此错误 我创建了一个名为 my project 的空白文件夹 然后 在其中 我执行了创建一个 package json 文件 npm init f 然后当尝试运行时 npm install
  • RemoteAuthentication 错误:OpenIdConnectAuthenticationHandler:message.State 为 null 或为空

    RemoteAuthentication 错误 OpenIdConnectAuthenticationHandler message State 为 null 或为空 即使成功获取代码 id token 和 token 后 我将 Razor
  • 使用大数据集在 Google Colab TPU 上训练 seq2seq 模型 - Keras

    我正在尝试使用 Google Colab TPU 上的 Keras 训练用于机器翻译的序列到序列模型 我有一个可以加载到内存中的数据集 但我必须对其进行预处理才能将其提供给模型 特别是 我需要将目标单词转换为一个热向量 并且在许多示例中 我
  • 正在使用 PIL 保存损坏的图像

    我遇到一个问题 操作图像像素导致保存损坏的图像 因此 我使用 PIL 打开图像 然后将其转换为 NumPy 数组 image Image open myimage png np image np asarray image 然后 我转置图像
  • Google Cloud Platform (GCP) Cloud Shell“Boost”功能缺失

    当我今天打开 GCP Cloud shell 时 Boost 功能消失了 尝试了所有菜单 甚至尝试了此处给出的选项 通过 gcloud cli 启用 Google Cloud Shell Boost 模式 https stackoverfl
  • 嵌套循环结果

    我真的不知道如何找出嵌套循环的结果 例如 在下面的伪代码中 我无法弄清楚执行结束时会给出什么 如果有人给我一个简单的解决方案 我会很高兴 r lt 0 for i lt 1 to n do for j lt 1 to i do for k