Codeforces:"B. 8 Queens, Again"
Codeforces: "B. 8 Queens, Again"
问题在这里:B. 8 Queens, Again!!
我想我没有遇到最坏的情况或遗漏了什么。我的提交在 测试 2.
中失败
我刚刚用下一个 ones.I 检查了每个输入的行、列和对角线,我认为这就足够了。还有其他情况可以有效或无效吗?不过我不确定我的代码是否全部正确。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t, y[9], x[9], i, j, valid;
scanf("%d", &t);
while(t--)
{
valid = 1;
for(i = 0; i < 8; i++)
{
scanf(" %c %d", &x[i], &y[i]);
}
for(i = 0; i < 8; i++)
{
for(j = i+1; j < 8; j++)
{
if(x[i] == x[j] || y[i] == y[j] || abs(x[i] - x[j]) == abs(y[i]-y[j])) valid = 0;
}
}
(valid) ? printf("Valid\n") : printf("Invalid\n");
}
return 0;
}
您正在 scanf
将输入文件中的坐标字符转换为 int
。
for(i = 0; i < 8; i++)
{
char row;
scanf("%1c%1d ", &row, &y[i]);
x[i] = row - 'A';
}
一个int
大概是4或8个字节。因为它们是本地的,所以它们的内容在设置之前是未定义的。字符进入第一个字节,其余字节仍未定义。它可能有效,也可能无效。此外,这永远不会在大端机器上工作,因为您将它存储在最高有效字节而不是最低有效字节中。参见:endianness
确保您的参数类型与 scanf
字符串一致。可能,你的编译器给了你一个关于 warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int *’
效果的警告;如果是这样,这就是它试图告诉你的。
问题在这里:B. 8 Queens, Again!!
我想我没有遇到最坏的情况或遗漏了什么。我的提交在 测试 2.
中失败我刚刚用下一个 ones.I 检查了每个输入的行、列和对角线,我认为这就足够了。还有其他情况可以有效或无效吗?不过我不确定我的代码是否全部正确。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t, y[9], x[9], i, j, valid;
scanf("%d", &t);
while(t--)
{
valid = 1;
for(i = 0; i < 8; i++)
{
scanf(" %c %d", &x[i], &y[i]);
}
for(i = 0; i < 8; i++)
{
for(j = i+1; j < 8; j++)
{
if(x[i] == x[j] || y[i] == y[j] || abs(x[i] - x[j]) == abs(y[i]-y[j])) valid = 0;
}
}
(valid) ? printf("Valid\n") : printf("Invalid\n");
}
return 0;
}
您正在 scanf
将输入文件中的坐标字符转换为 int
。
for(i = 0; i < 8; i++)
{
char row;
scanf("%1c%1d ", &row, &y[i]);
x[i] = row - 'A';
}
一个int
大概是4或8个字节。因为它们是本地的,所以它们的内容在设置之前是未定义的。字符进入第一个字节,其余字节仍未定义。它可能有效,也可能无效。此外,这永远不会在大端机器上工作,因为您将它存储在最高有效字节而不是最低有效字节中。参见:endianness
确保您的参数类型与 scanf
字符串一致。可能,你的编译器给了你一个关于 warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int *’
效果的警告;如果是这样,这就是它试图告诉你的。