Thứ Sáu, 15 tháng 11, 2013

Bài tập Nhập môn CNTT 2

Bài 2: Xem công thức tính sau đây (đề thi tuyển sinh cao học ngành KHMT, năm 2011):

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) a0, a1, …, an-1.
Chỉ dùng duy nhất 1 vòng lặp (for hoặc while),
đề xuất cách thức để nhập n số thực như
trên và tính giá trị  của biểu thức Aver, xuất kết quả  tính  ra thiết bị  xuất chuẩn. Viết
chương trình để minh họa đề xuất đó.
Lưu ý: Phần này sinh viên chưa học về mảng, như vậy vấn đề chính của bài toán này là
không thể dùng mảng để lưu giá trị của n số thực nói trên. Như vậy phải đề xuất một giải
pháp “thông minh” để nhập và tính toán mà không đưa trước các số thực này vào mảng.

Ta thấy rằng biểu thức trên thật sự là TỔNG của các thành phần sau:









Vậy ta chỉ cần duyệt qua một lần, tính tổng và tổng bình phương của các giá trị,
 max và min là có thể tính được cả biểu thức.Đoạn code:


1.   #include <iostream>
2.   using namespace std;
3.   void main()
4.   {
5. int x;
6. double s1=0,s2=0, max=-1000000000, min =1000000000,n;
7. double kq;
8.
9. cin >> n;
10. for (int i=0;i<n;i++) {
11. cin >> x;
12. s1+=x;
13. s2+=x*x;
14. if (x>max) 
15. max=x;
16. if (x<min)
17. min=x;
18. }
19.  kq=2*s2 - 2*(max+min)*s1 + n*(max*max + min*min) + n/2 *
20 . (max-min)*(max-min);
21. cout << kq << endl;
22. }

2 nhận xét: