Java在OJ平台提交的方式与基本套路
Java在OJ平台提交的方式与基本套路第一次用Java提交Oj题目,发现比C++麻烦不少,C++ 写完放在OJ上大多数都能够直接跑,但Java甚至出现了编译错误这种情况,因此,需要对自己的程序做不少的修改。比如说,个人第一次提交的https://vjudge.net/problem/HihoCoder-1268九宫问题。本来程序是这个样子的package ninth_palace...
Java在OJ平台提交的方式与基本套路
第一次用Java提交Oj题目,发现比C++麻烦不少,C++ 写完放在OJ上大多数都能够直接跑,但Java甚至出现了编译错误这种情况,因此,需要对自己的程序做不少的修改。
比如说,个人第一次提交的https://vjudge.net/problem/HihoCoder-1268九宫问题。
本来程序是这个样子的
package ninth_palace;
import java.util.Scanner;
public class ninth_palace {
int MAX_N = 10;
int graph[] = new int[MAX_N+1];
int vis[] = new int[MAX_N];
int ans[] = new int[MAX_N];
int flag = 0;
public static void main(String[] args) {
ninth_palace ninth=new ninth_palace();
Scanner sc=new Scanner(System.in);
for(int i=0;i<ninth.vis.length;i++)
{
ninth.vis[i]=0;
}
for(int i=1;i<10;i++)
{
ninth.graph[i]=sc.nextInt();
ninth.vis[ninth.graph[i]]=1;
}
ninth.dfs(1);
if(ninth.flag==1)
{
for(int i=1;i<10;i++)
{
System.out.print(ninth.ans[i]);
if(i%3==0) System.out.print("\n");
else System.out.print(" ");
}
}
else if(ninth.flag>1)
{
System.out.println("Too Many");
}
}
boolean isok() {
int sum = graph[1] + graph[2] + graph[3];
for (int i = 4; i <= 9; i += 3) {
if (graph[i] + graph[i + 1] + graph[i + 2] != sum)
return false;
}
for (int i = 1; i <= 3; i++) {
if (graph[i] + graph[i + 3] + graph[i + 6] != sum)
return false;
}
if ((graph[1] + graph[5] + graph[9] != sum) | (graph[3] + graph[5] + graph[7] != sum))
return false;
return true;
}
void dfs(int pos)
{
if(pos==10&&isok())
{
flag++;
if(flag==1)
ans=graph.clone();
return;
}
if(graph[pos]!=0)
dfs(pos+1);
else
{
for(int i=1;i<=9;i++)
{
if(vis[i]!=0)
continue;
vis[i]=1;
graph[pos]=i;
dfs(pos+1);
vis[i]=0;
graph[pos]=0;
}
}
}
}
在OJ上编译不通过,硬是被改成了这个样子
import java.util.Scanner;
public class Main {
class Ninth_palace{
int MAX_N = 10;
int graph[] = new int[MAX_N+1];
int vis[] = new int[MAX_N];
int ans[] = new int[MAX_N];
int flag = 0;
boolean isok() {
int sum = graph[1] + graph[2] + graph[3];
for (int i = 4; i <= 9; i += 3) {
if (graph[i] + graph[i + 1] + graph[i + 2] != sum)
return false;
}
for (int i = 1; i <= 3; i++) {
if (graph[i] + graph[i + 3] + graph[i + 6] != sum)
return false;
}
if ((graph[1] + graph[5] + graph[9] != sum) | (graph[3] + graph[5] + graph[7] != sum))
return false;
return true;
}
void dfs(int pos)
{
if(pos==10&&isok())
{
flag++;
if(flag==1)
ans=graph.clone();
return;
}
if(graph[pos]!=0)
dfs(pos+1);
else
{
for(int i=1;i<=9;i++)
{
if(vis[i]!=0)
continue;
vis[i]=1;
graph[pos]=i;
dfs(pos+1);
vis[i]=0;
graph[pos]=0;
}
}
}
}
public static void main(String[] args) {
Main.Ninth_palace ninth=new Main().new Ninth_palace();
Scanner sc=new Scanner(System.in);
for(int i=0;i<ninth.vis.length;i++)
{
ninth.vis[i]=0;
}
for(int i=1;i<10;i++)
{
ninth.graph[i]=sc.nextInt();
ninth.vis[ninth.graph[i]]=1;
}
ninth.dfs(1);
if(ninth.flag==1)
{
for(int i=1;i<10;i++)
{
System.out.print(ninth.ans[i]);
if(i%3==0) System.out.print("\n");
else System.out.print(" ");
}
}
else if(ninth.flag>1)
{
System.out.println("Too Many");
}
}
}
还又声明了内部类,也是醉了。
关于内部类的初始化 https://blog.csdn.net/songdexv/article/details/6758972
总而言之:
提交OJ时要注意:
你提交的所有程序都应该以如下形式出现
public class Main{
public static void main(String[] args){
//其他代码
}
}
即,代码中必须存在一个public class Main
。不允许出现其他的public class
。
其他的坑还没遇到不可解决的,推荐如下博文,可作参考:
https://blog.csdn.net/bat67/article/details/79685997
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)