`
美丽的小岛
  • 浏览: 300866 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

1+2+…+n的思考

阅读更多

很久前一个同学面试回来,他说面试官给他出了一道很让他费解的题。

 

题目:求1+2++n,要求不能使用乘除法、forwhileifelseswitchcase等关键字以及条件判断语句(A?B:C)。

 

当时我听了,也傻了,怎么可以这样呀?觉得这个东西没有什么用呀,在一般写程序时都不会这样,觉得没有什么意义。后来并没有放在心上。

某天,在想知识点的结构树时候,遇到了一个组合模式,这个东西很好,可以建立一棵树。当完成构造这棵树,好像略有所感,觉得面向对象真的很不错的东西,就这样就可以不用if语句,有点妙。

突然,想到了这个搁置得有点尘的问题。如果这棵对每个父结点只有一个孩子,然后每个孩子只有一个孩子,这样在递归的跳出也就有了希望。越想觉得这个问题越有意思。这样就不用if的关键字。也就是说,对于递归的条件都满足了,而且还没有if等条件的关键字了。自然递归可以让循环的关键字消去。此时想到自然数的概念,其实想得真的很容易,一旦付之行动,做起来不容易。

 

package com.lr.test;
public interface INode {
int sum();
public void setNextNode(INode nextNode) ;
}

package com.lr.test;

public class Node implements INode {

	private INode nextNode = null;
	private int value = 0;

	public Node(int value) {
		this.value = value;
	}

	public INode getNextNode() {
		return nextNode;
	}

	public void setNextNode(INode nextNode) {
		this.nextNode = nextNode;
	}

	@Override
	public int sum() {
		return value + nextNode.sum();
	}

}

package com.lr.test;

public class EndNode implements INode {
	private int value = 0 ;
	public EndNode(int value){this.value = value ;}

	@Override
	public int sum() {
		// TODO Auto-generated method stub
		return value;
	}

	@Override
	public void setNextNode(INode nextNode) {}

}

package com.lr.test;

public class Test {
	
	public static void main(String[] args) {
		INode node3 = new Node(3) ;
		INode node2 = new Node(2) ;
		INode node1 = new Node(1) ;
		INode node0 = new EndNode(0) ;
		node3.setNextNode(node2);
		node2.setNextNode(node1);
		node1.setNextNode(node0);
		int a = node3.sum() ;
		System.out.println(a);
	}

}

 

这样对于各个节点就得用for,创建了,如果一个一个对象创建,这个跟s=1+2,s+=3.没有区别。

这个思路就到这里了。

经过思考,一个很吸引我的竟是static这个关键字,瞬间有了想法。可以在类中用一个静态变量,当一个节点创造时就让里面变量相加,如果创建100这样的对象就达到了目的。想了就试试去做。

 

public class Node2 {
	private static int value = 0;
	private static int s = 0;

	public Node2() {
		value++;
		s += value;
	}

	public static int sum() {
		return s;
	}

}

 

 

 

 

 

 

  

但有一点,我忽略了,这个该死的java虚拟机这里向内存申请了数组的空间,创建只是100个指针,并没有创建对像,如下如测试一下:

 

Node2[] node = new Node2[100] ;
System.out.println(node[0]);

 

有些时候,人很奇怪的,觉得不懂的东西越多了,越会觉得在未知的下一步会给我们一个很大的惊讶,事实也真是这样!

经过很多次看似完成了,但是还是没有完成。过了些天,在看操作优先级的时候,一个“||”,启发了我,这个东西很奇怪,如果第一个操作数为真了,后就不执行了,否则执行后面的。与“||”为兄弟还有一个“&&”。这个又满足了两上面所述的关系了。产生下面的一段代码:

 

public class testAdd {
	boolean b = false;
	int sum = 0;
	int s = 0;

	public int sum(int start, int end) {
		b = (start < end) && (s != (sum = sum(start, end - 1)));
		return end + sum;
	}

	public static void main(String[] args) {
		System.out.println(new testAdd().sum(1, 3));
	}
}

 

注意到,java中的布尔型与数值没有什么关系,不太像CC++

现在觉得面向对象思想淡了很多,还是用C吧。由最初的组合到现在的结构化,原来这个问题能让人有一个这样的飞越。

 

#include<stdio.h>
int s = 0 ;
int sum(int n)
{
   n && sum(n-1);
   return s += n;
}

int main()
{
   int n = 100;
   printf("%d",sum(n)) ;
   return 0;
}

 

 

 

 

 

 

 

好了,到C,果然是一道很让人的思维发散的题目,这样可以用数字与布尔型的关系了,在C中,0就是表于false.0表示true.这样就结合一下数组吧!如下的实现:

 

#include<stdio.h>
int add1(int) ;
int add2(int) ;
typedef int (*p_func)(int);
p_func p_add[2] ;
int main(){
   p_add[0] = add1 ;//跳出递归
   p_add[1] = add2 ;//继续递归
   printf("%d",sum(100)) ;
return 0 ;
}
int add1(int a){
   return sum(--a) ;
}
int add2(int a){
   return a ;
}
int sum(int a){
   return a + p_add[!a](a) ;
}

 

  思维,奔腾,光芒散发,无边无际。

跳出,框架,成就思维,不一般的畅游。

或者,未知的下一步更让人称妙!

生活与人生,或许……..

1
0
分享到:
评论

相关推荐

    Python+PyQt5实现五子棋游戏(人机博弈+深搜+α-β剪枝)

    在未使用剪枝前,当d = 2时,ai思考的时间为9~10s,使用剪枝后时间缩短到3~4s,当d = 3时,ai思考的时间为3~4分钟,d = 4时,ai思考时间已经不能忍受,使得游戏体验大大下降 在后续可以通过启发式搜索来优化ai,...

    像心理学家一样思考

    printf(“\nchoice :1.continue 2.over\n”); do{ singalxh(x,choice); singalxh(h,select); convolution(x,h,y,lenx,lenh); printf(“Do you want to input length of Convolution:Y/N?”); if(getchar()==’Y...

    黄冈中学高一数学教案

     根据数列的前n项写通项公式,一般围绕2n,2n±1,n2,n2±1,2n,2n±1,n±1等思考,此外还有1- ,10n-1等. 2、活用等差数列的性质解题. 例6、在等差数列{an}中,a4+a6+a8+a10+a12=120,求2a9-a10的值. 解析: ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5...

    “微专题”复习——促进数学深度学习.pdf

    常见解法:改造条件,变换形式,由条件a6 -d+ 26,得 + -1,则a+6 -(n+ )(a+ ) n -3+ ≥ 3+ 2, 当且仅当 n-√2 + 2,6 -1+ √2时等号成立。 变式2:已知正数a,b 满足 ab -2a+ b+ 3,求 + 6 的最小值。 ...

    安徽省枞阳县钱桥初级中学七年级数学下册 8.3《完全平方差公式和平方公式》平方差公式教案 (新版)沪科版

    (4)(2m+n)(2m-n) 然后,让学生计算(a+b)(a-b)=a2-b2,得出平方差公式(a+b)(a-b)=a2-b2。 活动 3:图形解释 让学生剪下一个边长为 b 的小正方形,从边长为 a 的正方形纸板上,然后拼成一个长方形。...

    七年级数学下册第八章整式的乘法8.1同底数幂的乘法幂的运算法则也可以逆用哟素材新版冀教版

    分析:根据已知条件不易求到 a, m, n 的值,观察 a3m-4n 的指数是差的形式,此时可思考逆用同底数幂的除法的法则,得到 a3m-4n=a3m÷a4n,然后再逆用幂的乘方法则,得到a3m÷a4n=(am)3÷(an)4,最后将已知条件代入...

    数据结构 排序 思考题2

    全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案 题目一:在堆排序中,元素下标从0开始。则对于下标为i的元素,其左、右孩子的下标分别为: A. 2i-1, 2i B. 2i, 2i+1 C. 2i+1, 2i+2...

    leetcode142&142环形链表。哈希+快慢指针两种方法python 代码+思路

    """ 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。...那么 a+x1 = n(x1+x2) 所以 a = (n-1)x1+nx2 = (n-1)(x1+x2)+x2 所以如果分别以相遇点和最初起点两个点为起点,两个速度相同的

    11份新型电力系统与储能系统解决方案.zip

    1+2+N“光储解决方案,赋能新型电力系统-杭州储能大会,pdf2022年杭州峰会演讲稿0905V3.pdf超高循环储能电站运行分享,pdf 储能市场增长,坚守安全底线.pdf高低压储能系统在不同场景下的应用方案.pdf高效组件与储能...

    计算机应用基础windows7+office2010计算机基础知识.pptx

    教学(jiāo xué)课件 计算机应用(yìngyòng)基础 2015年8月 共八十六页 计算机... 思考题 项目(xiàngmù)1 要点 任务(rèn wu)1 了解计算机 任务2 认识计算机 任务3 了解计算机语言 任务4 熟知计算机的性能 任务5

    二进制图文详解

    6. 补码的对称现象:-n = ~n + 1 案例: int max = Integer.MAX_VALUE; System.out.println(Integer.toBinaryString(max)); int min = Integer.MIN_VALUE; System.out.println(Integer.toBinaryString(min)); ...

    02古典概型与几何概型.pptx

    设 A 表示事件“每个盒子至多有一个球”,则意味着 |A|=N(N-1)(N-2)…(N-n+1)=。于是,P(A)=|A|/N^n。 思考:一个班 35 个同学,每个同学的生日都与其他同学不同的概率是多少? 例 4:一个口袋共装有 6 只球,4...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5...

    算法设计沙龙---几何算法套餐

    你了解几何吗?你了解几何算法吗?我们的沙龙将带领你进入几何的世界,进入计算机处理几何问题的领域。先请你思考以下几个问题,试试看你能否解决? ... 第2行至第N+1行输入N边形各点的X、Y坐标

    AI智能+人脸识别.pptx

    AI智能+人脸识别 2 0 1 9 AI智能+人脸识别全文共24页,当前为第1页。 CONT ENTS 何为后人脸识别 人脸识别的市场机会 商业场景的探讨 AI智能+人脸识别全文共24页,当前为第2页。 1 PART 何为后人脸识别 从1:1到1:N...

    国家集训队2019论文集.zip

    意m-1≤卩≤n-1,有∑四=an-k-0,则称数列r为数列a的线性递归式。若10-1 我们称数列r为数列a的线性递推式。 我们称这个线性递推式的阶数为它的长度减一,称数列a阶数最小的线性递推式为数 列a的最短线性递推式。 12...

    医院选址问题

    医院选址问题 ...【思考题】图的存储结构和算法的设计需要一定的灵活性和技巧。从医院选址问题的求解过程,你有什么感想? 答:通过将图存储的方法很多,这儿用数组,简单化数据,可以更好的编号和运行程序。

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第1章 xml与dtd 2 1.1 xml的产生 2 1.2 w3c介绍 2 1.3 关于xml的几个问题 3 1.4 xml与html的比较 4 1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5...

Global site tag (gtag.js) - Google Analytics