zoukankan      html  css  js  c++  java
  • 奇葩求和问题

    今天看到看个有意思的求前n项和的问题,奇葩点在于求和不能用 if、 for、while、do while、等差数列,这些知识。 可以利用递归来做,一般递归方法在此略过。只是感觉下面这个代码方法有点巧妙,所以分享下。
    #include
    typedef int (*fun)(int); //定义一个返回值为int 带参数int类型的函数指针
    fun judge[2];
    int end(int a)
    {
    	return 0;
    }
    int sum(int a)
    {
    	return a+judge[!!a](a-1);//传统递归,judge[!!a]亮点
    }
    int main()
    {
    	int n,m;
    	scanf("%d",&n);
    	while(n--)
    	{
    		judge[0]=end;// 存放函数地址
    		judge[1]=sum;
    		scanf("%d",&m);
    		printf("%d
    ",sum(m));
    	}
    	return 0;
    }
    
    typedef可以让你从现有类型中创建一个新类型 格式: typedef existing-type new-type 具体用法:
    1. 定义类型                                                                                                                 typedef int Apple                                                                                                Apple  为 int  别名
    2. 为复杂声明定义别名,简化美观代码。                                                                    原声明:void (*b[10]) (void (*)());变量名为b,先替换右边部分括号里的,pFunParam为别名一: typedef void (*pFunParam)(); 再替换左边的变量b,pFunx为别名二: typedef void (*pFunx)(pFunParam); 原声明的最简化版: pFunx b[10];
           
  • 相关阅读:
    PHP中cookie和会话编程
    PHPweb应用程序开发技巧
    javascript中DOM编程
    PHP动态创建Web站点
    在IE下FLASH背景透明而在FF下不透明的解决方法
    ThinkPHP返回插入记录的id号
    PHP面向对象编程
    PHP smarty编程总结
    Linux用户权限设置
    无法载入 mcrypt 扩展,请检查 PHP 配置
  • 原文地址:https://www.cnblogs.com/NYNU-ACM/p/4236848.html
Copyright © 2011-2022 走看看