【问题标题】:Stdin in C or C++: Spotify: Reverse Binary PuzzleC 或 C++ 中的标准输入:Spotify:反向二进制拼图
【发布时间】:2013-03-03 13:46:58
【问题描述】:

这是我关于堆栈溢出的第一篇文章,所以如果我错过了一条规则,我提前道歉。 我试图搜索一些帖子,但找不到我要找的内容。

我正在尝试在 Spotify 上提交 Reversed Binary problem,但它给出的回复是“错误的答案”。我已经用 C 和 C++ 对问题进行了编码,并且能够验证大量输入的答案。看来问题不在于程序的逻辑。谜题指出“输入是从标准输入读取的”。

我试过用:

  1. C:printf、scanf 函数
  2. C++:cout 和 cin 函数(并在顶部写“using namespace std”)
  3. C++:直接使用 std::cout 和 std::cin 函数。

但似乎没有一个有效。

int stack[32];
top=-1
long inputNum,outputNum=0;
cout<<"Enter a Number\n";
cin>>inputNum;
while(inputNum>1) {
    if(inputNum%2 == 0) {
        push(0);
        inputNum=inputNum/2;
    } else if(inputNum%2 == 1) {
        push(1);
        inputNum=inputNum/2;
    }
}
push(1);
int i=0,x=0;
while(top>-1) {
    x=pop();
    if(x==0) {
        i++;
        continue;
    } else if(x==1) {
        outputNum=outputNum+powl(2,i);
        i++;
    }
}
cout<<outputNum;

【问题讨论】:

  • 欢迎您!请花几分钟阅读faq
  • 如果您阅读了整个常见问题解答,您将获得一个徽章(c:
  • 发布最短的非工作示例,可能是 20 行代码。解释您预期会发生什么以及实际会发生什么。
  • 若要在堆栈溢出时格式化代码,请在其前面加上一个空行,并在每个非空行上加上 ` 四个前导空格。您还可以通过将文本放在“反引号”中(在 ~ 键下方)来生成 code snippets。代码 sn-ps 也是让 &lt;&gt; 出现的最简单方法。
  • int 堆栈[32]; top=-1 long inputNum,outputNum=0; cout>输入数字; while(inputNum>1) { if(inputNum%2 == 0) { push(0);输入编号=输入编号/2; } else if(inputNum%2 == 1) { push(1);输入编号=输入编号/2; } } 推(1);诠释 i=0,x=0;而(顶部>-1) { x=pop();如果(x==0) { i++;继续; } else if(x==1) { outputNum=outputNum+powl(2,i);我++; } } cout

标签: c++ c stdin


【解决方案1】:

好的。您必须意识到,spotify 似乎是一个自动机器人,它编译并运行您提交的代码。

首先,您通过提供“输入数字”提示来污染答案。机器人不会将其与真正的答案分开。

其次,我看不出它是如何编译的。 push()pop()topstack 代码是什么?您是否尝试使用 std::stack 类?如果是这样,请检查您的使用方式。

另一方面,如果您使用的不是 std::stack,而是一些您自己的自定义宏(未显示),那么我敢打赌检查这些。

【讨论】:

  • 是的,我意识到它不是自动的。让我删除 cout 语句,然后在最后打印(cout)最终答案,然后再试一次。由于空间不足,我没有复制整个代码。我实现了堆栈 push() 和 pop() 函数,它们的定义就在我的 main() 之下。 Top 是一个跟踪堆栈当前位置的变量,它以 -1 开头,第一次推送将在堆栈 [++top] 处,即堆栈 [0]。 Stack[32] 是一个包含 32 个元素的整数堆栈,因为我需要的最大数字是 10 亿,它可以包含在任何 32 位长(Log 2 1000000000)= 32 位的数据类型中。
  • 好的......我认为第一个 COUT 语句是问题所在,我删除了“cout
  • 这是我试图在回答中强调的,您需要测试并检查输出是否符合预期。
【解决方案2】:

在 C++ 中从标准输入读取,并写入标准输出:

#include <iostream>

int main() {
    unsigned int value;
    std::cin >> value;
    std::cout << reverse_binary(value);
}

你只需要实现reverse_binary(c:

您可以将其提取到适用于任何流的函数中:

void main_io(std::istream& input, std::ostream& ouput) {
    unsigned int value;
    input >> value;
    output << reverse_binary(value);
}

并使用cincout 调用它:

int main() {
    main_io(std::cin, std::cout);
}

或者您可以使用stringstreams 进行测试:

#include <sstream>
#include <cassert>

int main() {
    std::istringstream input("13");
    std::ostringstream output;

    main_io(input, output);

    assert(output.str() == "11");
}

【讨论】:

    【解决方案3】:

    您的流媒体(虽然有问题)运行良好。
    我运行你的代码,

    int reverse_binary(int value)
    {
      if (value == 13) return 11;
      return 1;
    }
    

    它必须在您自己的 reverse_binary 函数中。 你的实际问题是什么?

    【讨论】:

    • 问题是当我将此解决方案(在我的 IDE Xcode 上适用于任何数字 1 您好 Shishir Mahajan,感谢您提交解决我们的问题“reversebinary”的解决方案!我们已经测试了您的解决方案,但在此过程中我们不幸地发现了以下错误: 错误答案 但不要让这让您灰心,请随时修复您的程序并重试!您真诚的,Spotify
    • 我不知道要纠正什么,因为我在解决方案中看不到问题。
    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 2011-08-25
    • 2010-12-01
    • 2012-10-05
    • 2010-11-20
    • 2013-02-02
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多