注册 登录
编程论坛 C++教室

我的脑子都纠结成浆糊了。T-T

糖包包 发布于 2011-04-24 11:15, 967 次点击
用c++ 编程:计算1+3+3^2+3^3+3^4+……+3^10=?

我不会啊,~~想了好久还是没头绪.

这个该怎么做啊,可不可以教我一下思路,谢谢了。
15 回复
#2
lintaoyn2011-04-24 11:55
每一项都是前一项的3倍。问题就是等比数列的求和。套用公式。
#3
糖包包2011-04-24 14:11
回复 2楼 lintaoyn
程序代码:
#include  <iostream>
using namespace std;
void main()
{
    double i,sum;
    sum=1;i=1;
    while(i<=3*3*3*3*3*3*3*3*3*3)
    {sum=sum+i;i=i*3;}
    cout<<sum;
}
谢谢,我这样写对吗?算出来是88574,可是上面那一步(i<=3*3*3*3*3*3*3*3*3*3)。。

有没有上面方法能简化一下啊..万一不知10项怎么办啊?
#4
Pirelo2011-04-24 14:26
求3的0次幂到n次幂的的和嘛,有什么好难的?
//定义一个函数power计算3的j次幂
int power( int j)
{
    int i;
    int s=1;
    for(i=1;i<=j;i++)
    {
        s=s*3;
    }
    return s;
}
//main函数中每次循环调用一次power()函数
void main()
{
    int sum=1;
    int i=10;
    for(i=1;i<=10;i++)
    {
        sum=sum+power(i);
    }
    cout<<sum;
}
#5
糖包包2011-04-24 14:49
回复 4楼 Pirelo
恩恩,O(∩_∩)O谢谢啊,

因为是大一刚开始学这个,所以就有点迷茫。..

书上都没有套用两个的例子,谢谢你啦~受益良多啊~

原来还可以这样定义两个在去用啊~
#6
lintaoyn2011-04-24 14:51
程序代码:
#include<iostream>
using namespace std;
int exp(int base, int e)//base底数,e是指数
{
    int result = 1;
    for(int i = 0; i <e; ++i)
        result *= base;
    return result;
}
int gPSum(int a1,int n, int q)//a1为第一项,n是数列一共有几项,q是该数列的公比
{
    return a1*(1-exp(q,n))/(1-q) ;//套用等比数列的求和公式
}
int main()
{
    cout << "请输入第一项、公比、以及数列的长度" << endl;

    int a1, q, n;
    cin >> a1 >> q >> n;

    cout << gPSum(a1, n, q) << endl;
    return 0;
}
1是3^0。从3^0到3^10一共是11项。
你输入1 3 11就能得到结果。
#7
糖包包2011-04-24 14:54
回复 6楼 lintaoyn
。。。好强大>v<
#8
糖包包2011-04-24 15:03
回复 6楼 lintaoyn
偶像啊,
这到底是怎么想出来的.

我又想到我的3*3*3*3*3*3*3……………………
...
#9
pangding2011-04-25 13:23
回复 8楼 糖包包
写程序有时要点数学功底。比如这道题,要是在看到时想到是等比数列求和,肯定会用公式做的。
求和公式高中的时候就学过,楼主说自己是大一的,看来就是学过的知识忘掉了呗~~
#10
pangding2011-04-25 13:27
另一种比较简单的写法是像这样:
程序代码:
#include <stdio.h>

int main(int argc, char *argv[])
{
    int sum = 0, term;
    int i;

    for (term = 1, i = 0; i <= 10; i++)
    {
        sum += term;
        term *= 3;
    }

    printf("%d\n", sum);

    return 0;
}

#11
stranger552011-04-25 15:13
回复 10楼 pangding
版主为什么总在C++ 教室 块 写 C代码呢。。。
#12
pangding2011-04-25 18:42
很多人都问过类似的问题,以前写的代码拿来稍做修改而已。

楼主主要是不会写算法,输出之类的应该不是问题。用 C 写的代码可以再很多个版块用,呵呵~~
另外我以前是在 C 区做版主的,c++ 实力其实很差,偶尔在这边的版块答题,蒙大家错爱推成版主。
#13
pangding2011-04-26 09:52
写一个 c++ 的代码:
程序代码:
#include <iostream>
#include <cmath>    // 里面有 pow 函数。用于算一个数的几次幂。
using namespace std;

class Geometric {
public:
    Geometric (double a1 = 1.0, double q = 1.0, int n = 1)
    { compute(a1, q, n); }

    ~Geometric () {}

    void compute(double a1, double q, int n)
    { sum = a1 * (1 - pow(q, n)) / (1 - q); }

    friend ostream& operator<< (ostream &out, const Geometric& g);

private:
    double sum;
};

ostream& operator<< (ostream &out, const Geometric &g)
{
    out << g.sum;
    return out;
}

int main(int argc, char *argv[])
{
    Geometric g(1, 3, 11);

    cout << g << endl;

    return 0;
}

#14
a198705022011-04-28 00:07
用等比数列求和就比较容易入手啦
#15
棉雨2011-04-29 09:46
可以用递归来做
#include"iostream"
using namespace std;
int digui(int n)
{
   
    if(n==0)
        return 1;
    else if(n>0)
        return 3*digui(n-1);
}
void main()
{
    int i,sum=0;
    for(i=0;i<=10;i++)
    sum+=digui(i);
    cout<<sum<<endl;
}
#16
mjsxjy2011-04-30 00:38
其实我觉得楼主还没练够啊。
特别是编程的思想和算法的思想似乎还几乎没有。
多写写程序就行了。刚开始可以多练点像小学应用题那种程序吧,那让你的大脑往程序的方向去思考,而不是停留在自己的思想上。
1