sample Input測試
sample Outputspa
問題描述:code
n條直線最多能劃分出多少個平面?blog
問題分析:遞歸
平面上只要多出現一條直線,就能至少多把平面分出一部分,而若此直線與其餘直線有n個交點,就再能把平面多分出n個部分,所以若想把平面劃分的部分最多,新添入的直線必須與前k條直線交k個點,即第二條直線要與第一條直線交1個點,第三條要與前兩條交2個點,……,第1999條與前1998條交1998個點,這樣,第二條直線多劃分出1+1=2個部分,第三條直線多劃分出1+2=3個部分,……,第1999條直線多劃分出1+1998=1999個部分。而第一條直線把平面劃分出2個部分,所以1999條直線能劃分平面的塊數爲:
2+2+3+4+5+…+1998+1999 = 1+(1+2+3+4+5+…+1998+1999) = 1+(1+1999)*1999/2 = 1999001ip
對n條直線最多劃分平面數:input
(1)使用遞歸it
f(n) = n + f(n-1) , n > 1 io
f(n) = 2 , n = 1class
(2)使用遞推
n = 1, S1 = 2
n > 1, Sn = 2 + 2 + 3 + …… + n = 1 + n * (n+1) / 2
#include<stdio.h> int main() { int t; long long n; long long sum; scanf("%d",&t); while(t--) { scanf("%lld",&n);//64bit防溢出 sum=1+n*(n+1)/2;//遞推公式使用 printf("%lld\n",sum); } return 0; }