首页 > 代码库 > HDU4927(Series 1)
HDU4927(Series 1)
题目地址:Series 1
题目大意:
有一个序列A集合为{A1,A2.....An}。第0个序列为其本身,第一个序列为后一个减去前一个(例:A2-A1,A3-A2...An-An-1)以此类推,则第n-1个序列就一定为一个数。输出这个数。
解题思路:
通过计算求出的这个数ans=aA1+a2A2..anAn。 则前面的系数为杨辉三角里第n行的系数(二项式系数),从最后一个系数符号为正,一正一负一次往前类推。
处理大数问题,用java编写。
代码:
1 import java.util.*; 2 import java.math.*; 3 4 public class Main 5 { 6 public static void main(String []args) 7 { 8 int n,i,j,T; 9 Scanner cin=new Scanner(System.in); //声明输入。10 BigInteger p[]=new BigInteger[3005]; //声明大数数组11 T=cin.nextInt(); //输入T12 while(T!=0)13 {14 T--;15 n=cin.nextInt();//输入n16 BigInteger minn=BigInteger.valueOf(0),maxx=BigInteger.valueOf(0),c=BigInteger.valueOf(1),tmp,ans;//声明加上赋初值17 18 for(i=1; i<=n; i++)19 p[i]=cin.nextBigInteger();20 21 for(i = 0; i<=n-1; i++) //从0开始,为了计算杨辉三角的系数符号从最后一个为正开始。22 {23 if(i>0) //除数不能为024 { 25 BigInteger xxx=BigInteger.valueOf(n-i); //乘上分母的最大的一个数26 c=c.multiply(xxx)/*相乘*/.divide/*相除*/(BigInteger.valueOf(i));//除去分子最小的一个数//通过计算出最后一个系数,依次计算出前一个的系数27 }28 tmp=c.multiply(p[n-i]);29 if(i%2==1)30 minn=minn.add(tmp);//相加31 else32 maxx=maxx.add(tmp);33 }34 maxx=maxx.subtract(minn); //正的值减去负数的值35 System.out.println(maxx.toString());//输出36 }37 }38 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。