奇安信笔试题-----编程题记录

T1.求m*n网格路径和的最大值

1.题目描述

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最大。

说明:每次只能向下或者向右移动一步。

2.题目示例

{{2,3,1},{2,5,3},{4,2,1}}
返回14

3.思路及代码

  • 思路:简单动规思想,分为几种情况分开讨论即可。
    • 1.当为上边界,它只能由它的左边的元素得到值
    • 2.当为左边界,它只能由它的上边的元素得到值
    • 3.当处于中间时,它要从它的上边和左边选择最大的
    • 最后返回最后一个元素即可,原地操作就行了
  • 代码:
public int maxValue (int[][] matrix) {
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix[0].length; j++){
            	//顶点跳过
                if(i == 0 && j == 0){
                    continue;
                }else if(i == 0){//上边界
                    matrix[i][j] = matrix[i][j] + matrix[i][j - 1];
                }else if(j == 0){//左边界
                    matrix[i][j] = matrix[i][j] + matrix[i - 1][j];
                }else{
                	//求最大值
                    matrix[i][j] = Math.max(matrix[i][j - 1], matrix[i - 1][j]) + matrix[i][j];
                }
            }
        }
		//返回右下角的元素即可
        return matrix[matrix.length - 1][matrix[0].length - 1];
    }

T2.求200之内的正整数的阶乘

1.题目描述

输入一个数,如果该数n,在 1=<n<=200时计算阶乘并输出,不在此范围内输出Error

2.题目示例

  • 示例一:
    • 10---->输出3628800
  • 示例二:
    • 201---->输出Error

3.思路及代码

  • 思路:这题主要就是对数据的一个处理,无论是用int还是long都会溢出,所以这里我们要用java中提供的BigInteger类来做就不会溢出,看代码
  • 代码:
package DemoTest;

import java.math.BigInteger;
import java.util.*;
public class Demo003{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        if(n < 1 || n > 200){
            System.out.println("Error");
            return;
        }
        BigInteger sum = new BigInteger("1");
        while(n > 0){
            sum = sum.multiply(new BigInteger(String.valueOf(n)));
            n--;
        }

        System.out.println(sum);
    }
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值