Posted by : Unknown 15 November 2013

Đề bài: Chỉ dùng 1 vòng lặp (for hoặc while) hãy tính biểu thức sau:

\[Aver = \sum\limits_{i = 0}^{n - 1} {{{({a_i} - Max)}^2} + \sum\limits_{i = 0}^{n - 1} {{{({a_i} - Min)}^2} + \frac{n}{2}{{(Max - Min)}^2}} } \]
Trong đó Max,Min lần lượt là giá trị lớn nhất, nhỏ nhất của n số thực (được nhập vào từ thiết bị nhập chuẩn).

Ý tưởng:
Ta có:
\[\sum\limits_{i = 0}^{n - 1} {{{({a_i} - Max)}^2} = \sum\limits_{i = 0}^{n - 1} {a_i^2} }  - 2Max\sum\limits_{i = 0}^{n - 1} {{a_i}}  + n.Ma{x^2}\]
\[\sum\limits_{i = 0}^{n - 1} {{{({a_i} - Min)}^2} = \sum\limits_{i = 0}^{n - 1} {a_i^2} }  - 2Min\sum\limits_{i = 0}^{n - 1} {{a_i}}  + n.Mi{n^2}\]
Vậy
\[\begin{array}{l}
Aver = \sum\limits_{i = 0}^{n - 1} {{{({a_i} - Max)}^2} + \sum\limits_{i = 0}^{n - 1} {{{({a_i} - Min)}^2} + \frac{n}{2}{{(Max - Min)}^2}} } \\
Aver = 2\sum\limits_{i = 0}^{n - 1} {a_i^2}  - 2(Max + Min)\sum\limits_{i = 0}^{n - 1} {{a_i} + n(Ma{x^2} + Mi{n^2}) + \frac{n}{2}{{(Max - Min)}^2}}
\end{array}\]

Thuật toán:
Trong vòng lặp
- Nhập vào số thực và cộng dồn vào biến sum để lưu tổng, cộng vào biến sum2 để lưu tổng bình phương.
- Kiểm tra và cập nhập max, min.
Ráp các giá trị vào công thức và tính kết quả.

Mã nguồn:
#include <stdio.h>
int main()
{
        int n;
        double m, res, a, sum=0, sum2=0, max=-1000000000, min=1000000000;
        scanf("%d", &n);
        m = (float)n;
        while (n>0)
        {
                scanf("%lf", &a);
                sum += a;
                sum2 += a*a;
                if (max<=a)
                        max = a;
                if (min>=a)
                        min = a;
                n--;
        }
        res = 2*sum2 - 2*(max+min)*sum + m*(max*max + min*min) + (m/2)*(max-min)*(max-min);
        printf("%lf", res);
        return 0;

}

Leave a Reply

Subscribe to Posts | Subscribe to Comments

Popular Post

Blogger templates

Pages

Powered by Blogger.

About

- Copyright © Meo's Blog -Metrominimalist- Powered by Blogger - Designed by Johanes Djogan -