• max of 直线划平面


    在一个无限延伸平面上有一个圆和n条直线,这些直线中每一条都在一个圆内,并且同其他所有的直线相交,假设没有3条直线相交于一点,试问这些直线最多将圆分成多少区域。
    第一行包含一个整数T,(0< T<=100)表示测试次数。
    每组测试数据包含一个整数N(0<=N<=10000000),表示直线的条数。
    对于每一组测试数据,输出这个圆能被这N条直线分成的最多区域数。

    sample Input

    2
    1
    2

    sample Output

    2
    4
     
     
    详细解答:

    问题描述:

         n条直线最多能划分出多少个平面?

    问题分析:

         平面上只要多出现一条直线,就能至少多把平面分出一部分,而若此直线与其他直线有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  = 1999001

         对n条直线最多划分平面数:

        (1)使用递归

             f(n) = n + f(n-1) ,   n > 1     

             f(n) = 2               ,   n = 1

        (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
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    Django Swagger接口文档生成
    基于docker快速搭建hbase集群
    Cassandra数据操作管理工具tableplus
    基于docker创建Cassandra集群
    基于docker快速搭建hive环境
    [20200623]应用报错:当前事务无法提交,而且无法支持写入日志文件的操作
    zabbix--监控 TCP 连接状态
    kubernetes 使用ceph实现动态持久卷存储
    MySQL备份脚本
    Linux Pam后门总结拓展
  • 原文地址:https://www.cnblogs.com/gti2baby/p/10456432.html
Copyright © 2020-2023  润新知