我的程序可以在我的计算机上运行,​​但不能在 CodeEval 上运行

Posted

技术标签:

【中文标题】我的程序可以在我的计算机上运行,​​但不能在 CodeEval 上运行【英文标题】:My program works on my computer, but not on CodeEval 【发布时间】:2016-09-29 23:09:38 【问题描述】:

我现在正在处理 CodeEval 上的一项简单挑战。您需要逐行从文件中获取输入,并且每行包含由管道分隔的十六进制数和二进制数。目的是将左边所有的十六进制数相加,右边的二进制数相加,并测试哪个和更大。如果右侧(二进制边)大于或等于十六进制边,则打印“True”,否则打印“False”。示例行是“5e 7d 59 | 1101100 10010101 1100111”,输出为真,因为右侧大于左侧。我的代码在我的计算机上打印了正确的输出,但在 CodeEval 上,没有结果输出,我的分数为零。没有列出任何错误。有没有我看不到的问题?

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <cstdlib>
#include <math.h>
using namespace std;

fstream myFile;
string line;
vector<string> panNums;
int sum1, sum2;

int toDec(string s);

int main(int argc, char *argv[])

  //open the file
  // get numbers by line
  myFile.open(argv[1]);
  while(getline(myFile, line))
    
      //cout << line << endl;
        istringstream mystream(line);
        string nums;
        // read in each number into string nums one by one
        // then add that number to the vector that was created
        while(mystream)
          
            mystream >> nums;
            panNums.push_back(nums);            
          
        bool afterSep = false;
        sum1 = 0;
        sum2 = 0;
        for(int i = 0; i < panNums.size() - 1; i++)
            
                stringstream stream;
                if(panNums.at(i) == "|")
                 
                    sum1 = sum2;
                    sum2 = 0;
                    afterSep = true;
                    i++;
                   

                // if true, do stuff
                if(afterSep)
                 
                    // deals with the binary side
                    sum2 += toDec(panNums.at(i));
                 
                // if false, do other stuff
                else
                 
                    // deals with the hexidecimal side
                    istringstream f(panNums.at(i));
                    int temp;
                    // reading hex number into int(AKA converting to int)
                    f >> hex >> temp;
                    sum2 += temp;
                   

            
                // cout << "sum1 " << sum1 << endl;
                // cout << "sum2 " << sum2 << endl;
                if(sum2 >= sum1)
                 
                    cout << "True" << endl;
                 
                else
                 
                    cout << "False" << endl;
                 
        // clear the current vector in order to exclusively have the next line of text stored
        panNums.clear();
    



int toDec(string s)

    int num = 0;
    int i = s.size() - 1;

    // starts at index 0
    // which is really the 2^6 or however big the binary number is
    for(int a = 0; a < s.size(); a++)
      
        if(s.substr(i, 1) == "1")
         
            num += pow(2, a);
         
        i--;
      
    // cout << num << endl;
    return num;


【问题讨论】:

我不熟悉 CodeEval,但这种网站通常通过标准输入而不是文件来提供输入。 是的,这通常也是我在其他编码网站上看到的,但 CodeEval 使用文件路径作为输入。 #include &lt;string&gt; — 你似乎依赖于它被其他东西拉进来,这取决于平台。 num += pow(2,a); 更改为num += 1 &lt;&lt; a;pow 函数浪费了 2 的幂和平方。左移更简单,大多数处理器都有执行操作的指令,而不是调用函数来执行此操作。 if (s.substr(i,1) == "1") 替换为if (s[i] == '1')。您不需要提取 1 个字符的子字符串。耗时太长。只看1个字符。该字符串可以被视为一个字符数组。 【参考方案1】:

两台电脑是同一个操作系统吗?如果是这样,它们应该没问题,但否则你需要在两个系统上编译,这意味着每个系统都有一个可执行文件。无论如何,当我在 mac 上写东西并想在 mac 和 linux 上运行它时,这仍然有效。

【讨论】:

感谢您的回答。我阅读了提交指南,该站点指出他们使用 unix 类型的环境进行编译,因此应该可以编译。这是真正令人困惑的部分,因为我过去曾使用过这个站点,如果代码无法在该站点上编译,它实际上会给我一个错误。这一次,提交没有列出任何错误。

以上是关于我的程序可以在我的计算机上运行,​​但不能在 CodeEval 上运行的主要内容,如果未能解决你的问题,请参考以下文章

我的程序包含一个 DLL,但只能在我的计算机上运行。我的程序在另一台计算机上运行,​​但看不到硬件

如何从我的 Mac 上的终端窗口运行 g++

vb.net 应用程序不能在其他计算机上运行?

如何在 Friends 计算机上运行带有 ms 访问数据库的 java 应用程序?它在我的电脑上运行良好

在不同的计算机上运行 Qt 应用程序

是否可以在我的本地计算机上运行 .php 文件? [复制]