gpt4 book ai didi

c++ - UVA 11959 骰子错误答案

转载 作者:行者123 更新时间:2023-11-30 02:52:46 27 4
gpt4 key购买 nike

所以我试图解决 uva 11959 Dice .但是问题给出的第三个例子给了我错误的答案。然后我发现如果我改变

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 个方向都是不同的。 (我想他们可能是,但我没有花时间去验证。)

关于c++ - UVA 11959 骰子错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18628613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com