zoukankan      html  css  js  c++  java
  • HDU献给杭电五十周年校庆的礼物 (切蛋糕,线段划分区域)

    献给杭电五十周年校庆的礼物

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 8710    Accepted Submission(s): 4867


    Problem Description
    或许你曾经牢骚满腹
    或许你依然心怀忧伤
    或许你近在咫尺
    或许你我天各一方

    对于每一个学子
    母校
    永远航行在
    生命的海洋

    今年是我们杭电建校五十周年,这是一个值得祝福的日子。我们该送给母校一个怎样的礼物呢?对于目前的大家来说,最好的礼物当然是省赛中的好成绩,我不能参赛,就送给学校一个DOOM III球形大蛋糕吧,这可是名牌,估计要花掉我半年的银子呢。

    想象着正式校庆那一天,校长亲自操刀,把这个大蛋糕分给各地赶来祝贺的校友们,大家一定很高兴,呵呵,流口水了吧...

    等一等,吃蛋糕之前先考大家一个问题:如果校长大人在蛋糕上切了N刀(校长刀法极好,每一刀都是一个绝对的平面),最多可以把这个球形蛋糕切成几块呢?

    做不出这个题目,没有蛋糕吃的!
    为-了-母-校-,为-了-蛋-糕-(不是为了DGMM,枫之羽最会浮想联翩...),加-油-!
     

    Input
    输入数据包含多个测试实例,每个实例占一行,每行包含一个整数n(1<=n<=1000),表示切的刀数。
     

    Output
    对于每组输入数据,请输出对应的蛋糕块数,每个测试实例输出一行。
     

    Sample Input
    1 2 3
     

    Sample Output
    2 4 8
     

    Author
    lcy
     

    Source
     

    Recommend
    lcy   |   We have carefully selected several similar problems for you:  1466 1480 1438 1249 1284 
    思路:
     
    (1)n条直线,最多可以把平面分为多少个区域。
     
    当有n-1条直线时,平面最多被分成了f(n-1)个区域。则第n条直线要是切成的区域数最多,就必须与每条直线相交且不能有同一交点。 这样就会得到n-1个交点。这些交点将第n条直线分为2条射线和n-2条线断。而每条射线和线断将以有的区域一分为二。这样就多出了2+(n-2)个区域。
     
    故:f(n)=f(n-1)+n
     
    =f(n-2)+(n-1)+n
     
    ……
     
    =f(1)+1+2+……+n
     
    =n(n+1)/2+1
     
    (2)
     
    设n刀最多可以切成g(n)块,则g(n)=g(n-1)+f(n-1)
     
    可以通过拆项推出 g(n)=(n^3+5n)/6+1
     
     
     
    #include<stdio.h>
     
    int main()
     
    {
     
            int n;
     
           while(scanf("%d",&n)!=EOF)
     
            printf("%d ",(n*n*n+5*n)/6+1);
     
    }
     
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int add(int n)
    {
        int sum=0;
        if(n==0)
        sum=1;
        else
        sum=sum+add(n-1)+n;
        return sum;
    }
    int main()
    {
        int n,m;
        int num[1005];
        num[0]=1;
        for(int i=1;i<=1000;i++)
        {
            num[i]=num[i-1]+add(i-1);
        }
        while(~scanf("%d",&n))
        {
            printf("%d
    ",num[n]);
     
     
        }
        return 0;
    }
  • 相关阅读:
    [Cisco答疑]思科产品常见问题问答大汇总
    英语名人名言
    [配置实例]三层交换机组播配置实例
    利用VLAN技术组建三层线速校园网
    神州数码交换机配置基本命令
    SQL命令大全中英文对照
    SQL通用防注入系统3.1 最终纪念版
    带关闭按钮的浮动窗口
    Document方法对比
    HTML元素参考手册
  • 原文地址:https://www.cnblogs.com/dshn/p/4750680.html
Copyright © 2011-2022 走看看