Java在OJ平台提交的方式与基本套路

3 篇文章 0 订阅

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

 

 

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
算法与数据结构涵盖了以下主要内容: 数据结构(Data Structures): 逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值