Kiểm tra mảng tăng dần Python
Làm sao để kiểm tra mảng tăng dần hay giảm dần? Bài viết này sẽ cung cấp cho các bạn gợi ý ý tưởng giải và lời giải tham khảo. Tuy nhiên, Hiếu khuyến khích các bạn đọc ý tưởng giải và tự làm trước sau đó hãy so sánh với lời giải mẫu của tôi.
Show Đề bài: Cho dãy số nguyên có N phần tử, yêu cầu kiểm tra dãy số tăng dần hay giảm dần? Như vậy, ta có 3 trường hơp:
NỘI DUNG BÀI VIẾT Ý tưởng kiểm tra dãy số tăng dầnĐể kiểm tra mảng tăng dần hay không bạn có 2 cách:
Ta có giải thuật như sau: 1 2 3 4 5 dem = 0; Lặp qua từng cặp số a[i], a[i+1]: nếu a[i+1] >= a[i]: tăng dem return dem == N - 1;
Ý tưởng của giải thuật này như sau: 1 2 3 4 Lặp qua từng cặp số a[i], a[i+1]: nếu a[i] > a[i+1]: trả về false Trả về true Ý tưởng kiểm tra dãy số giảm dần tương tự như trên, mình sẽ không trình bày lại. Để hiểu rõ hơn, chúng ta sẽ cùng đi vào code nhé. Với trường hợp không tăng không giảm, ta có nhận xét: Mảng không tăng, không giảm đồng thời cả 2 hàm kiểm tra tăng dần, giảm dần đều trả về false. Tham khảo thêm: Bài tập lập trình C/C++ Hàm kiểm tra dãy số tăng dầnSử dụng cách kiểm tra đầu tiên: 1 2 3 4 5 6 7 8 9 10 // Kiểm tra theo kiểu bài toán thuận bool IsGrow1(int a[], int n) { int dem = 0; for (int i = 0; i < n-1; i++) { if (a[i + 1] >= a[i]) dem++; } if (dem == n - 1) return true; else return false; } Với cách kiểm tra theo bài toán nghịch, có vẻ vấn đề dễ dàng hơn một chút: 1 2 3 4 5 6 7 // Kiểm tra theo kiểu bài toán ngịch bool IsGrow2(int a[], int n){ for(int i = 0; i < n-1; i++){ if(a[i] > a[i+1]) return false; } return true; } Hàm kiểm tra dãy số giảm dầnChúng ta vẫn có 2 cách kiểm tra trên, đây là code hàm kiểm tra dãy số giảm dần: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // Kiểm tra theo kiểu bài toán thuận bool IsDESC1(int a[], int n) { int dem = 0; for (int i = 0; i < n-1; i++) { if (a[i + 1] <= a[i]) dem++; } if (dem == n - 1) return true; else return false; }
// Kiểm tra theo kiểu bài toán ngịch bool IsDESC2(int a[], int n){ for(int i = 0; i < n-1; i++){ if(a[i] < a[i+1]) return false; } return true; } Full source code kiểm mảng số tăng/giảmLưu ý:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 #include
// Kiểm tra theo kiểu bài toán thuận bool IsASC1(int a[], int n) { int dem = 0; for (int i = 0; i < n - 1; i++) { if (a[i + 1] >= a[i]) dem++; } if (dem == n - 1) return true; else return false; }
// Kiểm tra theo kiểu bài toán ngịch bool IsASC2(int a[], int n) { for (int i = 0; i < n - 1; i++) { if (a[i] > a[i + 1]) return false; } return true; }
// Kiểm tra theo kiểu bài toán thuận bool IsDESC1(int a[], int n) { int dem = 0; for (int i = 0; i < n - 1; i++) { if (a[i + 1] <= a[i]) dem++; } if (dem == n - 1) return true; else return false; }
// Kiểm tra theo kiểu bài toán ngịch bool IsDESC2(int a[], int n) { for (int i = 0; i < n - 1; i++) { if (a[i] < a[i + 1]) return false; } return true; }
void check(int a[], int n){ if(IsASC1(a, n)){ printf("\nDay so tang dan!"); }else if(IsDESC1(a, n)){ printf("\nDay so giam dan!"); }else{ printf("\nDay so khong tang khong giam!"); } }
int main() { int a1[] = {1, 3, 5, 7, 7}; int a2[] = {4, 3, 2, 1, 1, 1}; int a3[] = {1, 3, 2, 4, 5, 6};
check(a1, sizeof(a1)/ sizeof(int)); check(a2, sizeof(a2)/ sizeof(int)); check(a3, sizeof(a3)/ sizeof(int)); } Kết quả chạy với cách giải quyết bài toán theo hướng thuận. Với trường hợp theo hướng phủ định còn lại, bạn có thể thử. Kết quả đều sẽ như nhau: 1 2 3 Day so tang dan! Day so giam dan! Day so khong tang khong giam!
Nguyễn Văn Hiếu Sáng lập cộng đồng Lập Trình Không Khó với mong muốn giúp đỡ các bạn trẻ trên con đường trở thành những lập trình viên tương lai. Tất cả những gì tôi viết ra đây chỉ đơn giản là sở thích ghi lại các kiến thức mà tôi tích lũy được. |