这是一个 codevita 问题,它在提交时给了我错误的答案。任何人都可以检查我在我的方法中做错了什么

沙塔克赛提

问题如下 棋盘游戏 问题描述 给定一个 N x N 方格。除了左上角的每个正方形都填充了一个正整数。您从左上角开始,得分为 0,然后通过向右移动一格或向下移动一格移动到右下角。当您移动到新方格时,您的分数变为 [S/2] + k,其中 S 是您前一个方格的分数,而 k 是当前方格中的数字。上式中,[x] 是不大于 x 的最大整数。因此,[5] 是 5,而 [5.5] 也是 5。

编写一个程序来找出可以退出网格的最小分数。

约束 4 <= N <= 30

每个方格中的数字 <= 1000

输入格式第一行包含一个整数N,代表网格的大小

接下来的 N 行,每行有 N 个空格分隔的整数,给出写在网格的连续行上的数字

输出 可以退出网格的最小分数

时间限制 1

说明示例 1

输入

输入

4

0 3 9 6

1 4 4 5

8 2 5 4

1 8 5 9

输出

12

解释

N=4。分数集如给定。4 X 4 分数如下所示

一组可能的移动是向下、向右、向下、向右、向右、向下。

对应分数为1、4、4、7、7、12

示例 2

输入

5

0 82 2 6 7

4 3 1 5 21

6 4 20 2 8

6 6 64 1 8

1 65 1 6 4

输出

7

解释

一组可能的移动是向下,向右,向右,向右,向下,向下,向下,向右

`import java.util.Scanner;
public class A_Board_Game {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        int[][] board = new int[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                board[i][j] = s.nextInt();
            }
        }
        System.out.println(minscore(board,n));
    }
    public static int minscore(int[][] a, int n){
        int ans = 0,i=0,j=0;
        while(i+1<n && j+1<n){
           if(a[i+1][j]<a[i][j+1]){
               ans = (ans/2) + a[i+1][j];
               i = i+1;
           //    System.out.println("down is "+ans);
           }
           else{
               ans = (ans/2) + a[i][j+1];
               j=j+1;
             //   System.out.println("right is "+ans);
           }
        }     
        ans = (ans/2) + a[n-1][n-1];  
        return ans;
    }  
}
`
古普雷特·辛格

在您的代码中,您只需检查右侧或底部的值是否较小,然后移至该侧,问题就在这里。也许下一个元素比你之前留下的元素小。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章