我正在编写问题http://acmph.blogspot.com/2010/12/usaco-prime-cryptarithm.html
的解决方案当我在计算机上运行它时,给定输入数据
(1|var5)
我的电脑给了我384的答案,这是正确的答案。但是当我将它上传到USACO网站时,它说我的程序输出1.为什么会发生这种情况? 这是我的代码:
7
4 1 2 5 6 7 3
答案 0 :(得分:2)
在oneof1
和check
函数中,不会为函数中的所有返回路径返回值。因此,您的程序显示未定义的行为,因为从返回值的函数返回任何内容都不是UB。这就是为什么你在不同的计算机/系统上运行时会得到不同的答案。
要解决此问题,请在true
函数中返回oneof1
,然后为false
函数返回check
:
bool oneof1(int n) {
int count1 = 1;
while (true) {
if (count1 > n)break;
else {
count1 = count1 * 10;
int digit = n%count1 / (count1 / 10);
if (!count(digits.begin(), digits.end(), digit) ){
return false;
}
n = n - n%count1;
}
}
return true; // this was missing
}
bool check() {
int n = abc*e;
int n1 = abc*d;
if (n > 999 || n < 100)return false;
if (n1 > 999 || n1 < 100)return false;
if ((n1 * 10 + n) > 9999 || (n1 * 10 + n) < 1000)return false;
if (oneof1(n) && oneof1(n1) && oneof1(n1 * 10 + n)) {
return true;
}
return false; // this was missing
}
当您编写一个不为所有返回路径返回值的函数时,大多数编译器都会发出警告。请将您的警告设置为至少提供此信息的级别(或者,如果您这样做,请阅读编译器提供给您的警告)。