首页 > 代码库 > [算法]挑战你思维中的墙
[算法]挑战你思维中的墙
这篇文章主要要解决下面几个问题:
1,如何不用循环实现循环?
2,如何不用if else for while switch A?B:C实现选择?
3,如何不用+-*/实现+?
---------------------------------
Queston 1:
不用乘除法,for whiel if else switch case A?B:C求1+2+3+4+..+n.
Solution 1-1:
通常情况下我们用循环很容易实现1+2+..+n,正是因为很容易实现,所以当禁止我们使用常见方法时,我们的大脑就短路了。这时候我们该考虑问题的本质,循环的本质是什么?其实是一条语句sum=sum+i被执行了n次。而语言里面的循环语句只是实现这一目的的一种手段而已。还有什么手段让一条语句自动的被执行n次?对象数组 Obj* myobjes=new Obj[n]; 在这语句里n个Obj类被创建了,可以把语句写在构造函数里。代码如下:
#include <iostream>using namespace std;class SumByClass{public: static unsigned int sum; static unsigned int n; SumByClass() { n++; sum+=n; } static int getSum() { return sum; }};unsigned int SumByClass::n=0;unsigned int SumByClass::sum=0;unsigned int getSum(int n){ SumByClass* sco=new SumByClass[n]; return SumByClass::sum;}
Solution 1-2:
还可以用递归实现1+2+...+n,f(n)=f(n-1)+1,但是有一个问题,递归的返回怎么办?我们通常if(n==1) return 1就返回了。破解的思路与上面有点类似,数组,不同的语句写在不同的数组里,用数组的哪一项,这不是很容易确定的是吗?代码如下:
typedef int (*fun)(int);int sum1(int);int sum2(int);fun myFun[2]={sum1,sum2};int sum1(int n){ return 0;}int sum2(int n){ return n+myFun[!!n](n-1);}
[算法]挑战你思维中的墙
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。