问题如下 棋盘游戏 问题描述 给定一个 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] 删除。
我来说两句