多少块土地

你有一块椭圆的土地,你可以在边界上选n个点,并两两链接得到n*(n-1)/2条线段。它们最多能把土地分为多少个部分?

样例输入:4

样例输出:8

分析:欧拉公式:V-E+F=2。V是顶点数,F是面数(即土地块数加上最外面那个面),E是边数。只要求出V,E,答案就是E-V+1。不管是顶点还是边,计算时都要枚举一条从固定点出发(所以,最后要乘以n)的所有对角线。假设该对角线的左边有i个点,右边有n-2-i个点,则左右两边的点两两搭配后在对角线上形成了i*(n-2-i)个交点,得到了i*(n-2-i)+1个线段。注意,每个交点被重复计算了4次,每个线段被重复计算了2次。因为一个交点有两个线段相交而成,共有4个端点。

代码:

#include<stdio.h>
int main()
{
    int n;
while(scanf("%d",&n)==1)
{  int e,v,f=0,s=0,p,q=0,t;
     for(int i=0;i<=n-2;i++)
    {
         t=i*(n-2-i);
         s+=t;
         p=(i*(n-2-i)+1);
         q+=p;
    }
     v=n+(n*s)/4;
     e=n+(n*q)/2;
    f=e-v+1;
    printf("%d\n",f);
}

    return 0;
}

posted @ 2013-07-27 10:58  清风旋叶  阅读(177)  评论(0编辑  收藏  举报