- Back to Home »
- NM CNTT1 - Bài 02 - Tuần 05
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:
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;
}
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;
}