UVA 11959骰子答错
UVA 11959 Dice wrong answer
所以我试图解决uva 11959骰子。但是问题给出的第三个例子给了我错误的答案。然后我发现如果我改变
cin >> d1 >> d2;
至
scanf("%lx %lx", &d1, &d2);
它有效,但我不知道为什么。然而,当我提交代码时,它表明我的答案是错误的。有人能帮我解决这两个问题吗?
我的代码:
#include <iostream>
#include <cstdio>
using namespace std;
//rotate and flip the dice
#define R(d) ( ((d) & 0x000F00) << 12 | ((d) & 0x00000F) << 16 | ((d) & 0x00F0F0)
| ((d) & 0x0F0000) >> 8 | ((d) & 0xF00000) >> 20 )
#define F(d) (((d) & 0x000F0F) | ((d) & 0x00F000) << 8 | ((d) & 0x0000F0) << 12
| ((d) & 0x0F0000) >> 4 | ((d) & 0xF00000) >> 16)
bool E(long d1, long d2)
{
return ( (d1) == (d2) || (d1) == R(d2) || (d1) == R(R(d2)) || (d1) == R(R(R(d2))) );
}
int main()
{
long d1, d2;
long counter;
bool equal;
cin >> counter;
for( int i = 0 ; i < counter ; i++ )
{
scanf("%lx %lx", &d1, &d2);
// cin >> d1 >> d2;
equal = E(d1, d2) || E(d1, F(d2)) || E(d1, F(F(d2)))
|| E(d1,F(F(F(d2)))) ;
if(equal)
cout << "Equal";
else
cout << "Not Equal";
cout << endl;
}
return 0;
}
添加:我发现在for循环中,我需要再添加两个条件来确定"相等"。所以它应该是这样的:
equal = E(d1, d2) || E(d1, F(d2)) || E(d1, F(F(d2))) || E(d1, F(F(F(d2)))) || E(d1, F(R(d2))) || E(d1, F(R(R(R(d2)))));
但是我仍然不知道为什么我需要添加这两个条件。它不是已经被覆盖了吗?
您需要两个附加条件,因为六面模具(立方体)可以以24种不同方式之一定向。您最初的算法只检查16个方向(main
中的4个位置乘以E
=16中的4位置),因此有时无法检测到相等性。在这两个新条件下,您在main
中有6个位置,在E
中有4个位置,总共24个。但是,请注意,您生成的24个方向是否完全不同并不是很明显。(我想他们可能是,但我没有花时间来验证。)
cin >> d1 >> d2;
以十进制形式读取输入。scanf("%lx %lx", &d1, &d2);
读取十六进制的输入。
如果您想用iostream
将输入读取为十六进制,则可能需要使用std::hex
操纵器,类似于:cin >> hex >> d1 >> d2;
请注意,hex
位是"粘性"的,因此它将保持设置状态,直到您指定另一个基数。这意味着当你读上面的d1
和d2
时,一个hex
会同时影响两者——但这也意味着,如果你后来读了其他东西,它仍然会读成十六进制。
相关文章:
- UVA 10077 - 为什么是二分搜索?
- UVA 11995 中的运行时错误
- 我已经通过了该问题的所有测试用例,甚至是Udebugg上的所有测试用例,并且仍然在UVA在线法官上获得了WA裁决
- 我通过编译器C 11收到了UVA在线法官的错误消息.我永远不知道为什么会产生此错误
- 带有动态编程的C 中的UVA 3N 1
- 通过 uva 的中位数程序
- UVa 11402 运行时错误
- 这个C++代码有什么问题?3n+1 在编程挑战/UVa 中
- UVa 在线判断 - 3n + 1 - 错误答案
- UVA 3n+1(概率 100)答案错误,但所有测试用例均已通过
- UVA 11959骰子答错
- c++ UVA 579 - ClockHands wrong answer
- 用不同的字符串(UVa 272 - Tex 引号)替换开头和关闭 " 的代码不起作用
- UVa在线评委的错误答案
- UVa 10035 Primary Arithmetic
- UVA 195变位-运行时错误- c++
- 为什么是错误答案Uva: factor visors
- UVA(769):关键环节答错
- 停留在UVa的中位数是10107
- 解决UVA OJ的分割故障