Thiết kế thuật toán cho nhiệm vụ 1 với ý tưởng khác như sau: Dãy A là một hoán vị của dãy các số từ 1 đến n khi và chỉ khi dãy A có độ dài n và mọi số i từ 1 đến n đều nằm trong A.
Hãy nhập câu hỏi của bạn vào đây, nếu là tài khoản VIP, bạn sẽ được ưu tiên trả lời.
a)
Input: Dãy n số nguyên
Output: Đếm xem trong dãy đó có bao nhiêu số nguyên dương
b)
Bước 1: Nhập n và nhập dãy số
Bước 2: dem←0; i←1;
Bước 3: Nếu a[i]>0 thì dem←dem+1;
Bước 4: i←i+1;
Bước 5: Nếu i<=n thì quay lại bước 3
Bước 6: Xuất dem
Bước 7: Kết thúc
Em viết lại ý tưởng:
- Ta lập một hàm xét xem một số nguyên N có phải là SNT không.
+ nếu N <= 1 thì hiển nhiên không phải
+ nếu N >= 2: ta xét số dư của N cho các số từ 2 đến phần nguyên của căn N
* nếu N chia hết cho bất kỳ số nào trong khoảng [2; phần nguyên căn N] thì N không là SNT, ngược lại N là SNT.
- Áp dụng hàm đó vào dãy a(N), cho biến dem <-- 0;
+ xét từ a[1] trở đi đến a[n], nếu a[i] là SNT thì dem <-- dem+1. Vòng lặp thực hiện đến khi i = N.
- Thông báo giá trị của dem hoặc không có snt trong dãy nếu dem = 0
Input: dãy A và N phần tử
Output: Là cấp số cộng hoặc không là cấp số cộng
Thuật toán:
- Bước 1: Nhập N và dãy A1,A2,...,An
- Bước 2: d←A2-A1; i←2;
-Bước 3: Nếu i>N thì in ra kết quả là cấp số cộng rồi kết thúc
- Bước 4: Nếu Ai+1-Ai khác d thì chuyền xuống bước 6
- Bước 5: i←i+1, quay lại bước 3
- Bước 6: Thông báo không phải là cấp số cộng rồi kết thúc
THAM KHẢO!
Một ý tưởng khác để kiểm tra xem dãy n số có phải là một hoán vị của dãy số 1, 2, ..., n hay không là sử dụng tính chất đặc biệt của hoán vị. Ta biết rằng một hoán vị của dãy số từ 1 đến n sẽ có các giá trị từ 1 đến n đúng một lần, tức là không có giá trị lặp lại và không có giá trị bỏ sót. Với ý tưởng này, ta có thể thiết kế thuật toán như sau:
-Đọc dãy số vào mảng a gồm n phần tử.
-Kiểm tra độ dài của dãy a có bằng n không. Nếu không bằng n, in ra "KHÔNG" và kết thúc thuật toán.
-Khởi tạo một mảng visited gồm n phần tử, với giá trị ban đầu là False. Mảng visited này sẽ được sử dụng để đánh dấu các số đã xuất hiện trong dãy a.
-Duyệt qua từng phần tử trong dãy a, đồng thời đánh dấu số đó đã xuất hiện trong dãy a bằng cách đặt giá trị True tại vị trí tương ứng trong mảng visited.
-Kiểm tra mảng visited. Nếu một trong các phần tử của visited là False, tức là có giá trị bị bỏ sót trong dãy a, in ra "KHÔNG" và kết thúc thuật toán.
-Sau khi kiểm tra xong mảng visited, in ra "CÓ" nếu không có giá trị nào bị bỏ sót, ngược lại in ra "KHÔNG".
-Thuật toán:
function kiemTraHoanVi(a):
n = len(a)
visited = [False] * n
# Kiểm tra độ dài của dãy a
if n != len(set(a)):
return "KHÔNG"
# Duyệt qua từng phần tử trong dãy a
for i in a:
# Nếu số i đã xuất hiện trong dãy a
if i < 1 or i > n or visited[i-1]:
return "KHÔNG"
visited[i-1] = True
# Kiểm tra mảng visited
if all(visited):
return "CÓ"
else:
return "KHÔNG"