发散思维题——求1+2+3+...+n(剑指offer)

求1+2+3+...+n
  • 参与人数:1364时间限制:1秒空间限制:32768K
  • 通过比例:27.43%
  • 最佳记录:0 ms|0K()

题目描述

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

链接:http://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路:由于不能用一些运算和关键字,所以就要我们开动下大脑了。首先我想到的递归,一般的递归最后有个判断的结束符if(n==1) return 1;之类的,但是这里不能用if 那可以用什么代替吗? 有的!n本身就带有运算就可以了,想到逻辑运算符&& 可以解决问题! 但是递归的效率本身就不是很高,尤其是n很大的时候;

那么还有什么其他的方法吗?  有的!我想到的利用构造函数,和静态变量;每次让它做加法,调用n次就可以了,这样的效率明显要比递归来的快 !

/****
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
*/
#include<cstdio>
#include<iostream>
using namespace std;
static int N;
static int Sum;
/*
class FunSum {
public:
    FunSum(){++N;Sum+=N;}
};
class Solution {
public:
    int Sum_Solution(int n) {
        N=0;
        Sum=0;
        FunSum *a = new FunSum[n];
        delete []a;
        a=NULL;//不能让a变成野指针
        return Sum;

    }
};*/
class Solution {
public:
    int Sum_Solution(int n) {
        int sum = n;
        sum && (sum += Sum_Solution(n-1));
        return sum;
    }
};
int main()
{
    int n;
    Solution so;
    while(scanf("%d",&n)!=EOF)
    {
        printf("%d\n",so.Sum_Solution(n));
    }
    return 0;
}

当然还有其他更好的方法,大家多多发散下思维!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个序列是一个数学序列,它由分数1/1,1/2,1/3,... 组成。这个序列被称为调和数列。 在这个序列中,每个项的分母递增,从1开始,到无穷大。这意味着每个项的值越来越小,但是无论多小,它们都是正数。 调和数列与等差数列或等比数列不同,因为它们没有固定的公差或公比。相反,调和数列的差异在于分母的增加,导致项之间的差距变得越来越小。 部分调和数列的前几项是: 1/1,1/2,1/3,1/4,1/5... 调和数列在数学和物理学中都有着重要的应用。它在处理序列和级数问时经常出现。 当我们计算调和数列的和时,我们可以发现它是发散的。也就是说,调和数列的和会趋向于无穷大。 数学家们已经证明了这一点,具体表现为当n趋近于无穷大时,调和数列的和趋向于无穷大。这个结果就是调和级数的发散性质。 总而言之,调和数列是一个有趣的数学序列,它由递增的分母构成。它的和是发散的,随着项的增加越来越慢。调和数列在数学和物理学中有广泛的应用。 ### 回答2: 目中给出的数列是一个倒数数列。从数值的规律来看,数列的分子固定为1,分母从1开始依次递增。 这个数列可以表示为c1, c2, c3, ..., cn,其中ci表示数列中的第i个数。 首先是c1 = 1/1 = 1。 接下来是c2 = 1/2 = 0.5。 然后是c3 = 1/3 = 0.3333... (约等于0.33)。 继续下去,c4 = 1/4 = 0.25,c5 = 1/5 = 0.2,等等。 可以发现,随着分母逐渐增加,数列中的数值逐渐减小。这是因为分母越大,分数的值就越小。 总结起来,这个数列就是一个倒数数列,每个数的值都是1除以对应的分母。 ### 回答3: 这个序列是以递减方式列出的倒数序列。序列的第一项是1,第二项是1/2,第三项是1/3,依此类推。这个序列可以写成一个分数序列的形式:1/1, 1/2, 1/3, 1/4, 1/5, …。每一项都是前一项的倒数,且序列中的每个项都是一个正数。 这个序列的规律是每一项的分母是从1开始递增的自然数序列,而分子都是1。也可以说,这个序列是1除以自然数的序列。这个序列中的每一项都比前一项更小,且趋近于零。可以看出,随着分母的增加,每一项的值越来越接近于零。但是,由于分母是无限递增的自然数序列,这个序列中有无数项,因此它们的和是无限大的。 这个序列在数学中的重要性在于展示了分数序列的性质,以及无限序列的和的概念。尽管序列中每一项都比前一项更小,但是无限项的和仍然可以是无限大。这个序列在数学和科学中有着广泛应用,在很多计算问中起着重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值