不使用数组计算

时间:2013-10-25 17:53:30

标签: c++ c arrays

我想给用户一个号码,比如3, 然后从用户

中提供3个号码 像这样:

    int n;
    printf("insert one number");
    scanf("%d", n);

    int a;
    for(int i = 1; i <=n; i++){
          scanf("%d", a);
    }

并且不使用Array计算这个... 使用数组是非常重要的

Σa[i] a [j](i≠j)

输入示例:

3   1 2 3

计算这个

1x2 + 1x3 + 2x1 + 2x3 + 3x1 + 3x2

和输出22

抱歉我的英语不好,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

我打算在没有给你答案的情况下回答这个问题:

由于输入的第一个数字是您要读入的值的数量,因此您需要单独存储它并使用它来创建循环。

你的循环(使用你的示例输入)需要计算:

  

(1 * 2 + 1 * 3)+(2 * 1 + 2 * 3)+(3 * 1 + 3 * 2)

这归结为memo1288所暗示的:弄清楚数学成分。

答案 1 :(得分:1)

我们做一些数学运算。基于您给出的示例,原始表达式的完整形式为:

f(a,n)=Σa[i] a [j](i&lt; n,j&lt; n,j≠i)

=Σa[i](i

当我们用n + 1替换n时,我们得到:

f(a,n + 1)=Σa[i](i

=Σa[i](i

=Σa[i](i

=Σa[j](j

=Σa[j](j

= f(a,n)+ 2a [n]Σa[i](i

换句话说,n个数的计算值等于n-1个数的计算值加上2 *第n个数乘以所有先前数的总和。

如果不使用数组,应该很容易看到如何做到这一点。您只需要跟踪数字的运行总和以及计算的运行值。

我会让你写出实际的代码,因为这显然是一个功课问题,但这应该是很多信息可以让你开始。