奇葩求和问题
今天看到看个有意思的求前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\n",sum(m));
}
return 0;
}
typedef可以让你从现有类型中创建一个新类型
格式: typedef existing-type new-type
具体用法:
- 定义类型 typedef int Apple Apple 为 int 别名
- 为复杂声明定义别名,简化美观代码。 原声明:void (*b[10]) (void (*)());变量名为b,先替换右边部分括号里的,pFunParam为别名一: typedef void (*pFunParam)(); 再替换左边的变量b,pFunx为别名二: typedef void (*pFunx)(pFunParam); 原声明的最简化版: pFunx b[10];