zoukankan      html  css  js  c++  java
  • 多少块土地

    你有一块椭圆的土地,你可以在边界上选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 ",f);
    }

        return 0;
    }

  • 相关阅读:
    内存分配问题
    C++ assert 的一点说明
    强大的stringstream
    C++中随机数
    C++ 中new
    C++ 中string 详解 转载自 博客园
    未命名名字空间
    使用ifstream和getline读取文件内容[c++]
    6.bootstrap练习笔记-缩略图和list-group
    3.bootstrap练习笔记-媒体内容
  • 原文地址:https://www.cnblogs.com/lyf123456/p/3219183.html
Copyright © 2011-2022 走看看