zoukankan      html  css  js  c++  java
  • 切披萨饼

    问题: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 块
    ", res);
        printf("第二种方法的结果:%d 块", res2);
        
        return 0;
    }
    

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

    运行结果:

  • 相关阅读:
    2019JAVA第三次实验报告
    第二次作业
    第一周作业
    2019年春总结
    第二周作业
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
  • 原文地址:https://www.cnblogs.com/fanlumaster/p/13645018.html
Copyright © 2011-2022 走看看