1. 程式人生 > >折線分割平面 學習了解!!!

折線分割平面 學習了解!!!

include 一個 clu 每次 整數 技術分享 name 原創文章 space

【題型一】直線分割平面
在一個平面上有一個圓和n條直線,這些直線中每一條在圓內同其他直線相交,假設沒有3條直線相交於一點,試問這些直線將圓分成多少區域。
分析:

當添加第N條,為了使平面最多, 則第N條直線要與前面的N-1條直線都相交,且沒有任何三條直線相交一個點。
則添加第N條直線會多N-1個交點。由於每增加N個交點,就增加N+1個平面,所以添加第N條直線來會在之前的基礎上增加N個平面,用F[i]表示i條直線能把平面切分成的個數。
F[1]=2;
F[n]=F[n-1]+n;
遞推的F[n]=1+n*(n+1)/2 【題型二】折線分割平面
平面上有n條折線,問這些折線最多能將平面分割成多少塊?

分析先以問題一作為基礎,
再看每次增加兩條相互平行的直線的情況。
根據題型一分析可以知道
當第N次添加時,前面已經有2N-2條直線了,所以第N次添加時,第2N-1條直線和第2N條直線都各能增加2*(n-1)+1 個平面。
所以第N次添加增加的面數是2[2(n-1) + 1] = 4n - 2 個。因此,總面數應該是
1 + 4n(n+1)/2 - 2n = 2n22 + 1 如果把每次加進來的平行邊讓它們一頭相交
則平面1、3已經合為一個面,因此,每一組平行線相交後,就會較少一個面,
所以所求就是平行線分割平面數減去N,為2n22 -n + 1.
利用上述總結公式f(n)=2n22 -n + 1
【拓展】
說起佐羅,大家首先想到的除了他臉上的面具,恐怕還有他每次刻下的“Z”字。我們知道,一個“Z”可以把平面分為2部分,兩個“Z”可以把平面分為12部分,那麽,現在的問題是:如果平面上有n個“Z”,平面最多可以分割為幾部分呢?
說明1:“Z”的兩端應看成射線
說明2:“Z”的兩條射線規定為平行的
分析:
設f(n)表示n個z字型折線至多平面劃分數。
現在增加一條邊a,和3n條線都相交,增加3n+1個區域。
再增加一條邊b,與a平行,同樣增加3n+1個區域。
最後增加一條邊c,與已有的邊都相交,增加3n+3個區域。又因為要與a,b形成鋸齒形,所以又減去2*2個區域
所以得出遞推式 f(n)=f(n-1)+9*(n-1)+1
---------------------
作者:Casionx
來源:CSDN
原文:https://blog.csdn.net/summerxiachen/article/details/63252964
版權聲明:本文為博主原創文章,轉載請附上博文鏈接! 題目: 我們看到過很多直線分割平面的題目,今天的這個題目稍微有些變化,我們要求的是n條折線分割平面的最大數目。比如,一條折線可以將平面分成兩部分,兩條折線最多可以將平面分成7部分,具體如下所示。
技術分享圖片
Input輸入數據的第一行是一個整數C,表示測試實例的個數,然後是C 行數據,每行包含一個整數n(0<n<=10000),表示折線的數量。

Output對於每個測試實例,請輸出平面的最大分割數,每個實例的輸出占一行。

Sample Input
2
1
2
Sample Output
2
7
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		int a;
		scanf("%d",&a);
		int sum=a*a*2-a+1;
	    printf("%d\n",sum);
	}
	return 0;
}

  

折線分割平面 學習了解!!!