[算法]挑战你思维中的墙

这篇文章主要要解决下面几个问题:

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);
}
时间: 2024-10-28 21:28:09

[算法]挑战你思维中的墙的相关文章

拆掉思维里的墙——有感

近几天看了一本书<拆掉思维里的墙>,作者古典.感触颇深,冥冥之中明白了改变不了自己的不是行为,而是思想.你的思想决定了你的行动.因为你心中的那堵墙,使你看到与别人不同的世界,小编按照书中的目录顺序,阐述自己的想法. 假设:现在你有一笔足以在北京外环买一套100平居室的钱,你面临着两种选择: 拿着这笔钱,兴高采烈地买个小房.PS:从你现买的房子出发,每天要花2个多小时才能到你工作的地方. 去投资,去学习.PS:风险大,很可能赔了夫人又折兵. 选择有风险,执行需谨慎. 当你选择了在北京外环买房,买

《拆掉思维里的墙》——古典

第一章 安全感 把钱用来投资买房不如用来投资自己. 爱不是依赖不是索取,爱是给予,是付出.安全感也不是别人给的,安全感是自己被需要被认同,安全感也不是害怕.恐惧,当你内心足够强大时,当你被需要时就会有安全感,所以不要再在别人身上寻找你所谓的安全感.(当你能力足够强时就会有足够的安全感) 关于“爱”的三个误会:1.把依赖当成爱,真正的爱是给对方自由,也给自己自由.2.把爱自己当成了爱别人,发一条信息给恋人你却焦虑的等待着对方的回复,你这是在表达爱吗?如果是为什么你这么焦虑,是不是打着爱的旗号在索取

[读记]拆掉思维里的墙

2008年初,国内楼市初现调整之时,王石抛出了惊人之语:"对于那些事业没有最后定型,还有抱负.有理想的年轻人来说,40岁之前租房为好."他们购买的,其实是自己内心深处的"安全感".他们不相信自己的能力,于是觉得有一套房子,会让自己内心安全一点.毕竟,在这个大城市,有一个栖身之地,会让人觉得心里踏实.他们购买的,其实是一种莫名其妙的心智障碍,一种对自己能力的深深不自信.但是安全感真的可以来自于一套房子吗?这是我们本章要拆掉的思维之墙.在这个房价.股票日益动荡的社会,在

RX学习笔记:FreeCodeCamp的JavaScript基本算法挑战

FreeCodeCamp的JavaScript基本算法挑战 https://www.freecodecamp.com 2016-07-03 JavaScript还不是非常熟悉,用已经会的知识来解这些题,估计有些算法会非常笨. 1.反转字符串 str.split("").reverse().join(""); 2.阶乘(阶乘0的结果需为1) function factorialize(num) { var n=1; for(var i=num;i>0;i--){

[书目20151009]拆掉思维里的墙:原来我还可以这样活

第一章 你是不是安全感的奴隶 买房,卖梦想的房奴 一套房子消灭一个梦想 职业安全感奴隶 爱奴:你一个人也能好好过下去 关于“爱”的三个误会 为什么美女大多不认路 6招快速提升安全感 必问自己的两个触底反弹问题 安全感不是拿回来的,而是给回来的第二章 让有趣的生命扑面而来 你是“没兴趣”,还是“感兴趣” 投入的快乐是无条件的 有趣之人,生命开始对你感兴趣 无趣之人,往往是无胆之人 初恋都会衰退,兴趣会吗第三章 心智模式决定我们的命运 你相信星座是真的吗 心智模式:我们看到的是自己想看到的世界 你希

java数据结构与算法之递归思维(让我们更通俗地理解递归)

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53452971 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈(Stack)设计与实现 j

javascript算法挑战

1.翻转字符串算法挑战: 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. 你的结果必须得是一个字符串 function reverseString(str) { arr = str.split(''); str = arr.reverse().join(''); return str; } reverseString("hello"); 2.阶乘算法挑战: 如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积. 阶乘通常简写成

数据结构与算法:概述+思维导图

还记得这个经典公式吗? 程序=数据结构+算法     可见数据结构和算法对于程序的重要性.基于此博主写了数据结构与算法系列随笔.下面先给出数据结构与算法的思维导图. 一.数据结构的基本概念 数据结构定义: 数据结构是一种存储和组织数据的方式,以便于访问和修改.数据结构包括数据的逻辑结构.数据的存储结构以及数据的运算,即按照某种逻辑关系组织起来的一批数据,按一定的映射方式把它存放在计算机的存储器中,并在这些数据上定义了一个运算的集合. 数据的逻辑结构:反映数据元素之间的关系.有集合.线性结构.树型

高级脚本算法挑战

地址:https://www.w3cschool.cn/codecamp/list?pename=advanced_algorithm_scripting_camp 判断电话号码算法挑战:如果传入字符串是一个有效的美国电话号码,则返回 true.用户可以在表单中填入一个任意有效美国电话号码. 下面是一些有效号码的例子(还有下面测试时用到的一些变体写法):555-555-5555(555)555-5555(555) 555-5555555 555 555555555555551 555 555 5