欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

如何在OJ平台上使用Java进行编程提交及基础操作指南

最编程 2024-02-11 19:03:55
...

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.****.net/songdexv/article/details/6758972

总而言之:

提交OJ时要注意:

你提交的所有程序都应该以如下形式出现

public class Main{
    public static void main(String[] args){
           //其他代码
    }
}

即,代码中必须存在一个public class Main。不允许出现其他的public class

其他的坑还没遇到不可解决的,推荐如下博文,可作参考:

https://blog.****.net/bat67/article/details/79685997