Nhiệm vụ
Tìm tổng của tất cả các số nguyên trong khoảng từ 100 đến 500.
Hãy viết chương trình giải bài toán này mà không sử dụng công thức. Nếu chúng ta chỉ viết kết quả của phép cộng vào biến s , chẳng hạn như
\(s=100+101+102+103+...+500\),
chúng ta sẽ dành nhiều thời gian cho việc ghi âm, vì máy tính sẽ không hiểu cách sử dụng dấu chấm lửng trong một biểu thức số học và chúng ta sẽ phải viết tất cả các số từ 100 đến 500. Và giá trị của một chương trình như vậy sẽ là không đáng kể. Đặc biệt nếu chúng ta muốn thay đổi số của mình và lấy một phạm vi khác.
Chúng ta nên làm gì?
Nếu chúng tôi chú ý đến mục ở trên, thì chúng tôi liên tục sử dụng phép cộng " + ".
Bạn có thể thử thêm dần các số vào biến s . Ví dụ, sử dụng ký hiệu này
s=s+i .
Những gì chúng tôi đã làm ở đây:
1) ở bên phải, chúng ta đặt biểu thức s+i , tức là chúng ta lấy giá trị của biến s và thêm giá trị của biến cho nó i ;
2) ở bên trái, chúng tôi đặt tên của biến s , nghĩa là toàn bộ kết quả tính toán bên phải sẽ được lưu trữ trong cùng một biến s , vì vậy chúng ta sẽ thay đổi giá trị của biến s .
Nó chỉ còn lại để thay đổi giá trị của biến i trong phạm vi mong muốn. Điều này có thể được thực hiện với vòng lặp for .
Các số từ 100 đến 500 nằm trong phạm vi của chúng ta sẽ lần lượt đi vào biến i .
Ví dụ
# QUAN TRỌNG! Trước tiên, bạn cần đặt lại biến s,
# để ở bước đầu tiên, số 100 được thêm vào số 0,
# chứ không phải những gì trong bộ nhớ!
s = 0
cho tôi trong phạm vi (100, 501): # tiêu đề vòng lặp trong đó tôi
s += i # thay đổi giá trị của nó từ 100 thành 500 theo các bước 1,
# trong phần thân của vòng lặp dần dần đến biến s,
# thêm giá trị của biến thay đổi i,
# và lưu lại kết quả vào biến s
Giải pháp này rất giống với cách tính tổng theo các hành động:
\(s = 0 + 100 = 100, \\ s = 100 + 101 = 201, \\ s = 201 + 102 = 303 \\ ... \) nhịp
|
Số lớn nhất trong các số đã cho
Khi nghiên cứu toán tử điều kiện, chúng tôi đã đề cập đến chủ đề tìm số lớn nhất từ một số số đã nhập. Trong bài toán "Có nhiều nhất bốn số" chúng tôi đã sử dụng thuật toán sau:
1. gán giá trị cho biến M cho biến đầu tiên trong bốn biến;
2. nếu giá trị của biến thứ hai lớn hơn giá trị trong biến M , thì hãy thay thế giá trị của biến M bằng giá trị của biến thứ hai;
3. nếu giá trị của biến thứ ba lớn hơn giá trị trong biến M , thì hãy thay thế giá trị của biến M bằng giá trị của biến thứ ba;< br />
4. nếu giá trị của biến thứ tư lớn hơn giá trị trong biến M , thì hãy thay thế giá trị của biến M bằng giá trị của biến thứ tư.
Có thể thấy rằng mỗi số (hãy biểu thị nó bằng X ) mà chúng tôi đã so sánh với biến M , như sau:
mã giả
đầu vào X
nếu (M < X) thì
M = X
Công việc chính trong mã này là xác định giá trị ban đầu mà biến M sẽ có.
Thông thường, khi giải bài toán tìm giá trị lớn nhất hoặc giá trị nhỏ nhất, giá trị ban đầu của biến M được gán bằng số đầu tiên.
Như vậy, đoạn mã trên phải được thực thi ít hơn 1 lần so với số lượng các con số (vì con số đầu tiên phải được nhập và lưu làm giá trị ban đầu của biến M ).
Nếu chúng ta có bộ số từ bàn phím (ví dụ: trong biến n ), thì chúng ta có thể tổ chức một chu kỳ (từ 2 đến n ), sử dụng cùng một số để lưu biến số.
Cố gắng tự viết chương trình.
Tối đa không nằm trong số tất cả
Nếu chúng ta cần tìm giá trị lớn nhất (tối thiểu) không phải trong số tất cả các số đã nhập mà chỉ trong số các số thỏa mãn một điều kiện nhất định, thì chúng ta phải tính đến thực tế là số đầu tiên mà chúng ta lấy làm giá trị ban đầu của giá trị lớn nhất (tối thiểu) sẽ không phải lúc nào cũng đáp ứng yêu cầu của chúng tôi.
Ví dụ: nếu chúng ta đang tìm số âm lớn nhất, thì có tập dữ liệu: \(\{5, -2, 4, 2, -1, -3\}\ ) chúng ta sẽ nhận được số 5 trong giá trị ban đầu của giá trị lớn nhất và nó là số dương và lớn hơn bất kỳ số âm nào. Và do đó, điều kiện X > M sẽ luôn sai.
Do đó, chỉ thêm một lần kiểm tra số âm vào thuật toán từ bài toán trước là chưa đủ, cũng cần tính đến thực tế là số đầu tiên có thể không thỏa mãn điều kiện bắt buộc (trong trường hợp này là số âm). ).
Bạn có thể khắc phục điều này bằng cách thêm điều kiện sau vào bên trong vòng lặp:
mã giả
nếu X âm thì
nếu M >= 0 hoặc M < X, sau đó
M=X
Trong mã đã chỉ định, điều kiện M >= 0 cho phép bạn thực hiện hành động M = X ngay cả khi M biến ban đầu chứa một giá trị rõ ràng là lớn hơn phần còn lại (trong ví dụ của chúng ta, giá trị này bằng 5).
Chúng tôi cũng lưu ý rằng nếu phạm vi số được biết, thì số tối thiểu (tối đa) từ phạm vi đã chỉ định có thể được lấy làm giá trị ban đầu của giá trị tối đa (tối thiểu).
Nhiệm vụ
N số đã cho. Tìm phần tử lớn thứ hai trong một dãy.
Vấn đề này có hai cách hiểu.
Ví dụ: nếu chúng ta được cung cấp một bộ số: \(10\ 15\ 20\ 35\ 14\ 35\ 10\), thì câu trả lời sẽ là gì ?
Dưới "phần tử lớn thứ hai" hay đơn giản là "cực đại thứ hai", có thể hiểu là:
1) giá trị sẽ ở vị trí áp chót nếu chúng ta sắp xếp (sắp xếp) tất cả các giá trị theo thứ tự không giảm (mỗi giá trị tiếp theo lớn hơn hoặc bằng giá trị trước đó). Khi đó, đối với tập hợp số được xét, câu trả lời sẽ là giá trị 35;
2) giá trị của phần tử, lớn hơn giá trị lớn nhất. Vậy đáp số là 20.
Nếu chỉ có một phần tử lớn nhất trong tập hợp số (tất cả các phần tử khác nhỏ hơn), thì cả hai cách hiểu đều giống nhau và câu trả lời sẽ giống nhau cho cả hai trường hợp, nếu không thì câu trả lời sẽ khác.
Xem xét trường hợp đầu tiên (chúng tôi sẽ viết thuật toán trên mã giả).
Để tìm câu trả lời, chúng ta sẽ sử dụng hai biến:
1) maximum1 - giá trị lớn nhất (tối đa đầu tiên);
2) maximum2 - giá trị lớn thứ hai (câu trả lời của chúng tôi).
Nếu biết phạm vi giá trị thay đổi, thì làm giá trị ban đầu, chúng tôi lấy một số rõ ràng nhỏ hơn giới hạn dưới của phạm vi (ví dụ: với phạm vi từ -1000 đến 1000 - lấy số -1001 )
Nếu phạm vi giá trị không xác định, thì bạn có thể viết hai số đầu vào thành giá trị ban đầu của các biến max1 và max2 rồi so sánh các giá trị này. hai biến.
đầu vào N // số lượng
đầu vào a, b
tối đa1 = một
tối đa2 = b
nếu b > một, sau đó
tối đa1 = b
tối đa2 = một
Tiếp theo, chúng tôi xem xét tất cả các yếu tố khác (2 yếu tố đầu tiên đã được xem, vì vậy chúng tôi sẽ bắt đầu từ yếu tố thứ 3)
nc cho tôi từ 3 đến n
nhập một
nếu một > max1 // có giá trị lớn hơn max1
Cái đó
max2 = max1 // mức cao đầu tiên trở thành mức cao thứ hai
max1 = a // phần tử mới sẽ là giá trị lớn nhất đầu tiên
nếu không thì
// phần tử tiếp theo không quá max1
// nó cần được so sánh với giá trị max2
nếu một > tối đa 2
Cái đó
max2 = a // lấy nó làm giá trị mới max2
// max1 không thay đổi trong trường hợp này
Tất cả
Tất cả
kts
Cố gắng tự thực hiện thuật toán này.
| | |