首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中用伪码实现一种算法

在c++中用伪码实现一种算法
EN

Stack Overflow用户
提问于 2016-07-18 03:46:32
回答 3查看 1.6K关注 0票数 1

我试图从下面的伪码实现一个变化问题的递归算法

然而,我不知道如何正确地实现它,我的目标是学习如何读取伪代码而不是如何解决更改问题。

这是我在c++中的代码

代码语言:javascript
复制
int recChange(int money){
    int coins [6] = { 50, 25, 20, 10, 5, 1 };

    if (money == 0) return 0;

    int minNumberCoins;

    for (int i=0; i < 6; ++i){
        if (money >= coins[i]) {
            int numberCoins = recChange(money - coins[i]);

            if (numberCoins + 1 < minNumberCoins ){
                minNumberCoins = numberCoins + 1;
            }
         }
     }
     return minNumberCoins;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-18 04:00:43

伪码:

代码语言:javascript
复制
MinNumCoins ← ∞

它的状态是“初始化MinNumCoins到无穷大”。

您的等效代码:

代码语言:javascript
复制
int minNumCoins;

这声明了minNumCoins,但没有初始化。这不仅不是伪代码的状态,而且由于代码随后使用未初始化的变量,这将导致未定义的行为。

实现这个伪代码的基本方法有两种:

1)使用第二个变量,该变量指示值是否已设置。将变量初始化为无穷大的目的是找到为其计算的最小值。在每次尝试时,计算MinNumCoins的潜在候选值,如果它小于MinNumCoins的当前值,则新值将替换它。最后,MinNumCoins有一个最小的值来计算它。

通过初始化具有正无穷大的变量,这将获得MinNumCoins的第一个计算值,并设置它(因为第一个计算值总是小于无穷大)。

替换逻辑使用第二个变量(标志)来指示是否设置了该值。如果不是,则不管变量是什么,都会设置该值;但是,如果变量已经设置,代码将其与新的计算值进行比较,并在计算值小于现有值时更新该值。

2)第二种方法是将变量初始化为尽可能高的值。没有“无穷大”的值,可以将int设置为“无穷”。最近的候选值将是int可能设置的最高最大值。这将是:

代码语言:javascript
复制
#include <limits>

int MinNumCoins = std::numeric_limits<int>::max();

对于你的问题来说,这个“黑客”是否是一个可以接受的解决方案,你需要自己来决定。

票数 3
EN

Stack Overflow用户

发布于 2016-07-18 04:20:58

以及“从all__(!)向后退.(嗯哼).”

..。可能因此暴露了我的年龄..。(考夫)

..。请记住,“代码”只是(!!)"a (非常精确的.)意思是两个人可能希望彼此表达一个算法。“

当两个人选择用“伪码”来描述一个特定的算法时,他们之间的默示理解是,他们选择用一种特定的编程(语言或风格)进行交流,而这两者是相互熟悉的。但是,这应该是而不是的延伸,因为这意味着“他们所说的话”和“实际的计算机源代码”之间有任何直接的1:1对应关系。

票数 1
EN

Stack Overflow用户

发布于 2016-07-18 04:00:24

嗯,我在这里看到的一个问题是,您已经声明了minNumber硬币,但是您还没有将它具体初始化为任何数字。因此,它的起始值为0(0),当将它与正数进行比较时,它将永远不会返回true,因为它不大于正数。这就是你的程序不能正常工作的原因。在实现伪代码时,我没有看到任何其他问题。你经历得很好。好运:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38428295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档