无法在 C++ 中获取所需的输出

康萨

我们在作业中收到了一个问题。我在解释它时遇到了麻烦,所以我用相同的条件用 C++ 重写了它。但是,我似乎无法获得问题中列出的正确输出。有人可以建议我如何进行吗?

这是问题的片段。 1

这是我的代码:

    #include <iostream>
    #include <string>
    using namespace std;
    int main(){
        int n; //AreWeThereYet
        string a;
        a="Yes we have arrived";
        string b;
        b="We just left";
        string c;
        c="That was annoying";
        string d;
        d="Almost";
        int i;
    
        cout << "enter n" << endl;
        cin >> n;
    
        for(int i=0;i<=n;i++){
            //here starts the calc
            if(n==0){
                cout << a << endl;
                return 0;
            }
            if(n>5){
                cout << b << endl;
                n=(n-1);
            }else if(n>1){
                n=(n-2);
                cout << c << endl;
            }else{
                cout << d << endl;
                n=(n-1);
            }
        }
    }

循环似乎无法输出第一个问题和最后一个问题。

我想如果我重复这个问题,我可以通过反复试验来获得我需要的答案。下面我附上了我的输出图像。我希望输入“1”输出“几乎”,然后是“是的,我们已经到达”。

电流输出

甜美的

我们可以考察和讨论第一种情况。

输出应该是:

Almost
Yes we have arrived
That was annoying
That was annoying

如果你画一条数轴:

<- <0  -         0         -   1  -      2-3-4-5    -   6+       ----->
 Almost|Yes we have arrived|Almost|That was annoying|We just left|

然后,我们只需查看输出并开始对其进行推理。

几乎发生在负数和 1 上。我们可以排除负数,因为没有办法从负数跳到正数,因为每种情况都会做减法。所以,第一个“几乎”意味着 n 是 1。这就解释了前两行,而不是后两行。那么,我们如何得到“那很烦人”呢?

它需要 [2, 5] 范围内的 n。并注意的情况下,它使一个递归调用第一,然后打印,“这是讨厌”。那么,什么起始值n可以落在“这很烦人”块中并称为“几乎”块?

答案是 3。所以现在我们将手动遍历算法,假设 n = 3。

当 n == 3 时,它落入条件 n > 1。它做的第一件事是用值 n - 2 = 1调用自己这将打印 'Almost',然后打印 'Yes we have到达',因为带有 'Almost' 的块用 n - 1 = 0调用自己现在所有的嵌套调用都处理完毕,当 n== 3 时我们返回到初始块,并打印“这很烦人”,但我们只打印一次。所以,3不对。

如果我想再次打印“那很烦人”,那么我只需要将 n 增加到 4。

我们可以对 n = 4 进行快速检查。我将进入“烦人”块,使用 n - 2 = 2拨打电话,然后再次进入“烦人”块(我们需要打印 ' 这很烦人两次) ,并使用 n-2 = 0再次调用我们跳过了“几乎”,所以 4 是不正确的。

所以我们看 5. 5 - 2 = 3, 3 - 2 = 1。一路追踪,应该产生相同的输出。

没有代码,只有一个号码线和跟踪电话。这可以通过物理笔记卡或绘制递归堆栈来完成。

如果您仔细查看第三个输出,您应该注意到它大部分已经解决了,因为最后四行与我们刚刚解决的块相同。

这是一个很好的解决问题的技巧;使用以前解决的问题来分解和解决更大的问题。这就是为什么这项任务最好在没有代码的情况下完成,并且由您提出解决方案。其他人的解决方案最终成为您自己的解决方案中唯一的解决方案,您将更加挣扎。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章