码迷,mamicode.com
首页 > 其他好文 > 详细

切披萨饼

时间:2020-09-17 20:40:18      阅读:23      评论:0      收藏:0      [点我收藏+]

标签:src   结果   交点   span   master   cut   else   mat   log   

技术图片

问题:n刀最多把pizza切成几块?

分析:其实还是递推思想,比如两刀可以切成4块,那么下一刀,也就是第三刀,肯定是要和前两刀的每一刀线都要相交,这样才能保证切成足够多的块数,这样一来,就会多出 4 个交点(包括与圆的边界的焦点),也就会多出 3 个小块,原因时是每相邻的两个点就会确定一个多出的小块。容易推出,第 n 刀切下去最多会多出 n 块。递推关系是:

\(f(1) = 2; f(n) = f(n - 1) + n\)

C语言代码测试:

# include<stdio.h>

int CutPizza(int n)
{
    if(1 == n)
        return 2;
    else
    {
        return CutPizza(n - 1) + n;
    }

}

int CutPizza02(int n)
{
    return ((1 + n) * n) / 2 + 1;
}

int main(int argc, char *argv[]) {
    
    int res = CutPizza(8);
    int res2 = CutPizza02(8);
    printf("一共可以切 %d 块\n", res);
    printf("第二种方法的结果:%d 块", res2);
    
    return 0;
}

注意,根据递推关系,我们很容易就可以得出通项公式,所有上面的 CutPizza02 就是通项公式,在这里是比递归要好上很多的。

运行结果:

技术图片

切披萨饼

标签:src   结果   交点   span   master   cut   else   mat   log   

原文地址:https://www.cnblogs.com/fanlumaster/p/13645018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!