将19分解为3个不重复数字(1-9)之和的方法有几种(不计顺序)

新加坡2021-06-07 17:50:43admin2

不用考虑程序的效率,因为9*8*7 = 504 步,对计算机而言不算啥。

思路是这样的,不计顺序,这三个数由小到大分别为IJK的话,用3层循环嵌套

伪代码如下:

种数 = 0

I = 1 TO 7 {
J = I+1 TO 8 {
K = J + 1 TO 9 {
if i + j + k = 19 { 种数 + 1 ;输出一行IJK}
}
}
}

输出 种数

伪代码结束

自己用JAVA写一下吧,结果是
2+8+9=19
3+7+9=19
4+6+9=19
4+7+8=19
5+6+8=19
种数 = 5

c++编迷宫设置通路的思路

你用的是回溯法,估计你是想要实现最短通路。我给出一种思路。在一幅无向图中,如果所有的边都有相同的权,要求解某点到其他点的最短路径可以用迪杰斯特拉算法,也可以用广度优先遍历的方法。广度优先遍历的生成树即为树根到其他顶点的最短路径。相对于迪杰斯特拉算法其时间复杂度为O(n)。余下的问题就是怎么将迷宫抽象成无向图了。方法是对二维迷宫中的每一个“。”编号,从1起,采用邻接表法存储,对每个“。”其周围四个方向是“。”的记入中心“。”对应编号的邻接表项中,对每个“。”都这样一次,如此便形成了迷宫对应的无向图,用广度法或者迪法以出或入口为起点即可实现最短通路的求解。

相关推荐

猜你喜欢

大家正在看

换一换