- 浏览: 310844 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (272)
- java (42)
- c (49)
- 算法 (29)
- 汇编语言 (3)
- 字符集 (3)
- error (3)
- 搜索引擎 (2)
- 互联网 (18)
- linux (12)
- 网络 (20)
- VMWare (1)
- 面试 (7)
- c++ (55)
- 设计模式 (3)
- db (9)
- office (2)
- FS (1)
- rest (3)
- Ajax (2)
- Spring (2)
- Hibernate (3)
- matlab (1)
- load balancing (8)
- 分布式计算 (2)
- 易语言 (1)
- apache tomcat (1)
- 测试 (1)
- 数据结构 (5)
- 数学 (13)
- 服务器 (9)
- 读后感 (4)
- 好书介绍 (1)
- script (3)
- wordpress (2)
- delphi (21)
- pascal (8)
- xml (3)
- 趣味 (1)
- PHP (3)
- python (13)
- DLL (4)
- openGL (8)
- windows (2)
- QT (28)
- django (7)
- jquery (1)
- 数据挖掘 (7)
- nginx (1)
- js (1)
- mac (1)
- hadoop (3)
- 项目管理 (1)
- 推荐系统 (1)
- html (1)
最新评论
-
晴天1234:
related remove:attention.ibus和u ...
UBUNTU的默认root密码是多少,修改root密码 -
美丽的小岛:
美丽的小岛 写道如上配置好就得了。提示没有OpenGl.dll ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
如上配置好就得了。提示没有OpenGl.dll之类的,再增加入 ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与 ...
QT之DisConnect -
美丽的小岛:
LPCTSTR类型:L表示long指针 这是为了兼容Windo ...
QString与各种字符串之间的转化
很久前一个同学面试回来,他说面试官给他出了一道很让他费解的题。
题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(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中的布尔型与数值没有什么关系,不太像C与C++ 。
现在觉得面向对象思想淡了很多,还是用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) ; }
思维,奔腾,光芒散发,无边无际。
跳出,框架,成就思维,不一般的畅游。
或者,未知的下一步更让人称妙!
生活与人生,或许……..
发表评论
-
推荐!国外程序员整理的Java资源大全
2015-12-15 10:14 672本文由 ImportNew - 唐 ... -
jsoup select 选择器
2015-12-09 14:03 992问题 采用CSS或类似jquery 选择器(selecto ... -
xmlbeans问题(深刻)
2015-11-12 23:08 1199运行scomp,路径永远是一个问题; 1.Program ... -
spring配置一个简单的数据连接池(dbcp)
2015-11-12 14:16 8341.文件结构 2.包结构 3.spring.x ... -
java泛型之通配符的使用
2015-11-12 12:15 716转自: http://blog.csdn.net/lone ... -
Ubuntu下安装JDK
2015-05-02 18:42 567安装JDK: 1.下载 http://www ... -
vs2008【断点无效】解决方法
2015-04-13 10:05 796有时候,我们在用vs2008调试的时候,会出现断点无效。如下 ... -
C++模板之特化与偏特化详解
2015-01-07 14:44 844转自:http://www.jb51.net/a ... -
c++中的typename与class<转>
2015-01-07 08:51 834在泛型编程的形参表中,关键字typename和class具有 ... -
traits:Traits技术初探
2015-01-06 12:49 811概述:traits是一种特性萃取技术,它在Generic ... -
POD型别
2015-01-06 12:37 775POD全称Plain Old Data。通俗的讲,一个类或结 ... -
c++核心基础知识(内存管理)
2015-01-04 22:22 713内存管理是C++最令人切 ... -
内存分配器<转>
2015-01-04 22:07 1396题记:内存管理一直 ... -
operator new在C++中的各种写法
2015-01-04 19:27 1221http://blog.sina.com.cn/s/blo ... -
可变参数va_list
2014-12-26 17:45 8881.要在函数中使用参数,首先要包含头文件<stdarg ... -
map注意的两个问题
2014-12-11 14:21 649代码1 void main() { ... -
关于C++ const 的全面总结<转>
2014-11-14 12:56 767C++中的const关键字的用法非常灵活,而使用const ... -
C++DLL编程详解
2014-10-08 19:44 1671DLL(Dynamic Link Library)的 ... -
C++&&QT调试时出现的一些错误
2014-10-08 15:14 798错误 原因 解决 ... -
【转】C++ function、bind以及lamda表达式
2014-09-11 09:42 889本文是C++0x系列的第四篇,主要是内容是C++0x中新增 ...
相关推荐
`表示`n`的阶乘,即所有从1到`n`的正整数的乘积。随着项数的增加,这个级数能够越来越精确地逼近`e`的真实值。程序中的精度设定为`10^-6`,这意味着当新增项对总和的贡献小于`10^-6`时,计算就会停止。 ### 3. ...
标题中的“计算1^1+2^2+....N^N计算结果支持64位++”涉及的是一个数学问题和编程实现,其中“64位++”可能指的是使用64位整数类型来处理大数值,并且可能用C++语言进行编程。这个计算涉及到序列求和,具体来说是平方...
2. **循环**:从 1 开始,对每个整数 i 到 n 进行如下操作: - 计算 i 的阶乘:i! = 1 × 2 × 3 × ... × i。 - 将 i! 加到累加器 sum 上。 3. **结束**:循环结束后,sum 的值就是序列的和。 这个过程可以使用...
对于题目中的序列1+2+3+...,a=1,d=1,n是我们要求和的项数,所以和S可以简化为S = n*(n + 1)/2。这个公式在算法设计中非常关键,因为它允许我们在常数时间内求出序列和,无需进行实际的逐项累加,这对于大规模数据...
值得强调的是,KMnO4法测定亚铁的原理是基于KMnO4中的五价锰离子(MnO4-)在反应中被还原成二价锰离子(Mn2+),这一过程中Fe2+被氧化。虽然本实验使用的是KMnO4作为氧化剂,但许多氧化还原滴定法也采用其他氧化剂...
2. **基础案例**:在题目中,例如第一题,证明n+(n+1)+(n+2)+...+(3n-2)=(2n-1)^2,基础步骤是验证n=1时等式是否成立。 3. **归纳步骤**:第二步中,需要假设f(k)正确,即n+(n+1)+(n+2)+...+(3k-2)=(2k-1)^2对所有k...
例如,如果n=13,则所有页码为1、2、...、13,其中数字1出现了5次(1、10、11、12、13),数字0出现了1次(10)等。 ### 问题描述 具体来说,我们需要设计一种算法,输入参数为一个正整数n,输出结果是0至9这十个...
一般规律是,n个点可以连成的线段总数是1到n-1的所有整数之和。 4. **等差数列求和**:例如,12个点可以连成的线段数是1+2+3+…+10+11,20个点可以连成的线段数是1+2+3+…+18+19。这个过程就是等差数列求和的过程。...
负极反应为Zn + 2OH⁻ → ZnO + H₂O,正极反应为MnO₂ + 2e⁻ + 2H₂O → Mn(OH)₂ + 2OH⁻。 3. 二次电池(可充电电池):能反复充电和放电。以铅蓄电池为例: - 正极为PbO₂,负极为Pb,电解质为H₂SO₄溶液。...
例如,第n行有n个圆圈,其和为n(n+1)/2,即n的平方。整个数阵的圆圈总数为1+2+...+n=n(n+1)/2。 - 数阵经过两次旋转后,可以发现每一行对应位置的数之和保持不变,即对于第n行的第一个圆圈中的数n,三个位置的数之...
\[ F(n) = \begin{cases} 0 & n=0 \\ 1 & n=1 \\ F(n-1) + F(n-2) & n \geq 2 \end{cases} \] ### 二、火车站问题中的斐波那契数列应用 #### 2.1 基础公式推导 题目中给出了一个与斐波那契数列相关的函数 \( f(i)...
在高中数学中,数列的求和是重要的概念,它涉及到等差数列和...例如,思考题中的数列 \(1, a, 2a^2, 3a^3, ..., na^n\),可以通过对每一项提取公因子 \(a^n\),然后利用等差数列的求和公式来求解其前n项和 \(S_n\)。
2=(1×2),2+4=(2×3),2+4+6=(3×4),这是因为前n个偶数之和等于n*(n+1)。**2则要求学生进一步应用规律,写出更复杂的等差数列的和。例如,2+4+6+8是前4个偶数之和,等于4×5;2+4+6+8+10+12+14是前7个偶数之和,...
这个猜想提出,对于任何自然数N,按照规则若N为奇数则乘3加1,若为偶数则除以2,反复操作,最终都将达到1。尽管此猜想看起来简单,但至今未能找到一个反例,连数学家陶哲轩也只用概率方法得出它“几乎”成立。 文章...
11. **连乘式的递推**:证明连乘式(n+1)(n+2)·…·(n+n)与2n×1×3×…×(2n-1)的关系,变n=k到n=k+1时,需添加的因子是2(2k+1)。 这些题目涵盖了数学归纳法的各个方面,包括基本概念、应用、证明策略以及特殊...
int temp2 = Integer.parseInt(str2 + str1); return temp1 - temp2; } } ``` **代码解释:** - **主函数逻辑:** - 使用`Scanner`类读取输入。 - 定义一个整数数组存储输入的数字。 - 使用双重循环实现冒泡...
通过递推关系可以得出,当n=2^k时,T(n)=an+cnlogn,从而证明了时间复杂度为O(n log n)。 - **分析法**:利用前缀和的概念,可以在线性时间内找到最大子数组。具体步骤包括求出每个位置i的前缀和p[i],再基于前缀和...
2. **等差数列求和公式**:对于连续自然数的求和,如1+2+3+...+(n-1),可以使用等差数列求和公式S_n = n/2 * (首项 + 末项)。例如,12个点连成线段的条数可以通过这个公式快速得出,即S_{11} = 11/2 * (1+11) = 66。...
### 数字信号处理教程习题分析与解答 #### 一、数字信号处理基础概念 **数字信号处理(Digital Signal Processing, DSP)**是一门研究...希望每位学习者都能通过不断练习和思考,在数字信号处理领域取得更大的进步。
1. 等差数列:作者在探索切割蛋糕的规律时,发现了一个等差数列关系,即一刀的最多块数:2=1+1,二刀的最多块数:4=1+1+2,三刀的最多块数:7=1+1+2+3,四刀的最多块数:11=1+1+2+3+4,五刀的最多块数:16=1+1+2+3+4+5...