挑战是这样给出的:
为您提供了数量未知的测试用例。每个测试用例都包含一个自然数,其后是一个空格,关系运算符(==,!=,> =或<=),空格和另一个自然数。所有测试用例都用换行符分隔。您可以假设数字不超过1000位。
因此,我正在尝试使用C ++解决上述问题。问题是,该程序应在任何情况下都可以运行,这些情况将由Online Judge进行检查,但我的代码仅适用于有限数量的输入,因为该代码将由在线法官检查,并且未指定输入数量。因此,我坚持了如何解决此问题的方法。我也尝试使用do..while() loop
和while() loop
,但它不起作用-_-
我的代码如下:
#include <iostream>
using namespace std;
bool isSmaller(int n1, int n2, string oper)
{
// Calculate lengths of both string
if (oper == "==")
/* code */
if (n1 == n2)
return true;
if (oper == "<=")
/* code */
if (n1 <= n2)
return true;
if (oper == ">=")
/* code */
if (n1 >= n2)
return true;
if (oper == "!=")
/* code */
if (n1 != n2)
return true;
return false;
};
int main() {
/* code */
int n1, n2;
string oper;
for (int i = 0; i < 1; i++) {
cin >>n1>>oper>>n2;
}
for (int j = 0; j < 1; j++) {
if(isSmaller(n1, n2, oper)){
std::cout <<1<<'\n';
}
else{
std::cout <<0<< '\n';
}
}
return 0;
}
理想的输出:
二进制序列应出现在输出中。序列的第 i 个元素应等于1或0,具体取决于对应关系是对还是对。序列中的所有元素都应以换行符分隔。
Example
Input:
100 == 200
200 <= 100
200 >= 100
Output:
0
0
1
答案 0 :(得分:-1)
最后,我根据@bruno给出的提示编写了代码,但是仍然在线判断返回错误,我不知道问题出在哪里,但是代码似乎是正确的。
代码在下面:
#include <iostream>
#include <iomanip>
#include <sstream>
#include <list>
using namespace std;
bool computeResult(string line)
{
// compare two values from given operator
istringstream stream(line);
int n1, n2;
string oper;
stream >> n1 >> oper >> n2;
stream >> std::cout.rdbuf();
if (oper == "==")
return (n1 == n2);
if (oper == "!=")
return (n1 != n2);
if (oper == ">=")
return (n1 >= n2);
if (oper == "<=")
return (n1 <= n2);
return false;
};
int main() {
/* code */
list<bool> result;
std::string line;
std::istringstream stream(line);
cout << "Enter Numbers \n";
std::getline(std::cin, line);
do {
result.push_back(computeResult(line));
} while(std::getline(std::cin, line) && !line.empty());
for (auto b : result)
std::cout << b << std::endl;
return 0;
}
答案 1 :(得分:-1)
这里scanf()将帮助您进行未知数量的输入。 您可以在C ++程序中包含或使用scanf()和printf()。
while(scanf("%d %s %d",&n1,oper,&n2) == 3)
{
//Your code goes here.
}
说明 之所以有效,是因为scanf()返回成功扫描的输入总数,如果在分配第一个接收参数之前发生输入失败,则返回EOF。 在这种情况下,它将成功扫描n1,oper和n2并返回3。