• Java练习 SDUT-1149_计算题


    计算题

    Time Limit: 1000 ms Memory Limit: 65536 KiB

    Problem Description

    一个简单的计算,你需要计算f(m,n),其定义如下:
    当m=1时,f(m,n)=n;
    当n=1时,f(m,n)=m;
    当m>1,n>1时,f(m,n)= f(m-1,n)+ f(m,n-1)

    Input

    第一行包含一个整数T(1<=T<=100),表示下面的数据组数。
    以下T行,其中每组数据有两个整数m,n(1<=m,n<=2000),中间用空格隔开。

    Output

    对每组输入数据,你需要计算出f(m,n),并输出。每个结果占一行。

    Sample Input

    2
    1 1
    2 3

    Sample Output

    1
    7

    m,n数据有点大,直接用类可能会超时,但是后台数据有点弱,所以可以过。(其实输入100,100就会超时)

    import java.util.*;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner cin = new Scanner(System.in);
    		int a,b,t;
    		t = cin.nextInt();
    		while(t-->0)
    		{
    			a = cin.nextInt();
    			b = cin.nextInt();
    			System.out.println(f(a,b));
    		}
    		cin.close();
    	}
    	public static int f(int m,int n)
    	{
    		if(m==1)
    			return n;
    		if(n==1)
    			return m;
    		return f(m-1,n) + f(m,n-1);
    	}
    }
    

    所以用数组存储的方式来做。
    结果发现了一个特别坑的问题,计算结果哪怕开long也会爆……

    iimport java.util.*;
    
    public class Main {
    
    	public static void main(String[] args) {
    		Scanner cin = new Scanner(System.in);
    		int a,b,t,i,j;
    		long f[][] = new long [2050][2050];
    		for(j=0;j<=2000;j++)
    			f[1][j] = j;
    		for(i=0;i<=2000;i++)
    			f[i][1] = i;
    		for(i=2;i<=2000;i++)
    			for(j=2;j<=2000;j++)
    				f[i][j] = f[i-1][j] + f[i][j-1];
    		t = cin.nextInt();
    		while(t-->0)
    		{
    			a = cin.nextInt();
    			b = cin.nextInt();
    			System.out.println(f[a][b]);
    		}
    		cin.close();
    	}
    }
    
  • 相关阅读:
    mybatis-批量操作数据(list对象 )
    老男孩linux运维视频地址
    常见HTTP请求错误码
    项目定时器如何进行测试
    tomcat指定特定版本的jdk
    tomcat更改端口号and设置cmd别名
    第三方登陆-qq互联
    javascript-初级-day08
    Maven的pom.xml的格式与约束
    mabatis的mapper文件找不到-ssm升级maven常见问题
  • 原文地址:https://www.cnblogs.com/luoxiaoyi/p/9711328.html
Copyright © 2020-2023  润新知