標籤:style blog http color java os for art
題目地址: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 }View Code