gpt4 book ai didi

java - Minesweeper - Online Judge "Wrong answer"虽然它适用于 Netbeans

转载 作者:行者123 更新时间:2023-11-29 05:47:06 24 4
gpt4 key购买 nike

我试图在 UVa ( http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1130 ) 上提交扫雷问题

示例输入:

4 4
*...
....
.*..
....

示例输出:

*100
2210
1*10
1110

我在 NetBeans 上开发了代码。我已经对其进行了测试并且工作正常,但是当我尝试在 UVa 上提交它时,它导致提交的答案错误。

我有两个问题:1)我的代码有什么问题?2)在为 UVa 编码时我应该使用什么,不应该使用什么?

-如果有不同的标准我应该遵循,请指教

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

public static void main(String[] args) throws IOException{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
String REGEX_WHITESPACE = "\\s+";
String cleanLine = line.trim().replaceAll(REGEX_WHITESPACE, " ");
String[] numChar = cleanLine.split(REGEX_WHITESPACE);
int n = new Integer(numChar[0]).intValue();
int m = new Integer(numChar[1]).intValue();
char[][] mine = new char[n][m];
char[] curLine;

for(int i=0;i<n;i++){
line=reader.readLine();
cleanLine = line.trim().replaceAll(REGEX_WHITESPACE, " ");
curLine = cleanLine.toCharArray();
if(curLine.length==m){
mine[i]=curLine;
}
}
int starsCount=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(mine[i][j]=='*'){
System.out.print('*');
}
else{
try {
if (mine[i][j - 1] == '*') {
starsCount++;
}
} catch (Exception e) {
}
try {
if (mine[i][j + 1] == '*') {
starsCount++;
}
} catch (Exception e) {
}
try {
if (mine[i-1][j] == '*') {
starsCount++;
}
} catch (Exception e) {
}
try {
if (mine[i+1][j] == '*') {
starsCount++;
}
} catch (Exception e) {
}
try {
if (mine[i-1][j - 1] == '*') {
starsCount++;
}
} catch (Exception e) {
}
try {
if (mine[i-1][j + 1] == '*') {
starsCount++;
}
} catch (Exception e) {
}
try {
if (mine[i+1][j - 1] == '*') {
starsCount++;
}
} catch (Exception e) {
}
try {
if (mine[i+1][j + 1] == '*') {
starsCount++;
}
} catch (Exception e) {
}
if(j==m-1){
System.out.println(starsCount);
}
else{
System.out.print(starsCount);
}
starsCount=0;
}
}
}
}
}

最佳答案

这是您可以查看的一件事。

当您知道您的程序必须提供看起来与示例完全一样的输出时,例如在你的情况下

*100
2210
1*10
1110

您应该检查隐藏的空格 - 例如空格、制表符、换行符(可以是 \r\n\r\n 格式)。特别是,常见的陷阱是:

-最后一行后是否有换行符?

-换行符是 \r\n 还是 \r\n 有关系吗?

-如果你在任何地方有额外的空格,或者在开始输出之前有一个换行符,它是否认为样本不匹配?

-如果有制表符或大量空格,使用制表符而不是空格是否会导致样本不被视为匹配?

我在您的代码中发现了一个潜在陷阱。

如果一行的右边缘是地雷,它将print('*') 而不是println('*')。要解决此问题,请执行 println() 而不管单元格中的内容,如果它位于行的右侧 - 没有打印或 println 内容的逻辑,只是 println() 本身没有参数。

编辑:正如查理在对原始问题的评论中提到的那样,您必须对程序进行编码以处理多个字段并在每个字段之前打印 Field #num:。

这意味着您不应将所有代码都放在 main 中,而应将创建和求解一个字段的代码放入其自己的方法中,并在仍有输入要读取时从 main 中调用它。

关于java - Minesweeper - Online Judge "Wrong answer"虽然它适用于 Netbeans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15468001/

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