Từ 1 tới 8 trên tổng số 8 kết quả

Đề tài: Tìm các phần tử tối đại trong danh sách số nguyên?

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    25

    Mặc định Tìm các phần tử tối đại trong danh sách số nguyên?

    mình có bt này : liệt kê các phần tử tối đại trong danh sách số nguyên vừa nhập ( phần tử tối đại là phần tử lớn hơn liền trước và liền sau của nó ) . Các bạn biết chỉ giúp mình nha

  2. #2
    Ngày gia nhập
    12 2009
    Nơi ở
    bế quan tu lại
    Bài viết
    846

    C++ Code:
    1. if(a[i] > a[i - 1] && a[i] > a[i + 1])
    2.         cout << a[i] << " ";

  3. #3
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Hai phần tử ở hai đầu không có bên phải hay bên trái, ta có thể cho rằng chúng không thể là phần tử tối đại.
    Như vậy bài toán chỉ duyệt từ phần tử thứ nhì cho đến phần tử áp chót.

    Trong thuật toán (dãy là mảng hay dslk gì cũng vậy) ta sẽ xét từ phần tử thứ nhì đén phần tử áp chót, nếu nó lớn hơn hai phần tử trước và sau nò thì là tối đại. Nếu nó đã là tối đại thì đuơng nhiên số kế tiếp nó không thể là tối đại, ta không cần phải xét.

    Thí dụ phần tử là số và dãy là mảng

    C Code:
    1. // in ra phần tử tối đại trong mảng số a, n phần tử
    2. for (int i=1, j=n-1; i < j; i++)
    3.   if (a[i] > a[i-1] && a[i] > a[i+1])  printf("%d ", i++); // nếu tối đại thì in ra và nhảy 1 bước

  4. #4
    Ngày gia nhập
    03 2011
    Bài viết
    25

    tks 2 bạn rất nhiều
    trong danh sách liên kết đơn nếu mình khai báo 1 danh sách như thế này

    Code:
    typedef int datatype;
    struct node
    {
             datatype data;
             node *next;
    };
    node *phead=NULL;
    dòng for(node*p=phead;p!=NULL;p=p->next) duyệt đến hết danh sach ..vậy thì làm sao để kiểm tra p->data lớn hơn phần tử liền trước và liền sau nó hả bạn ?

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trích dẫn Nguyên bản được gửi bởi giacmo1612 Xem bài viết
    tks 2 bạn rất nhiều
    trong danh sách liên kết đơn nếu mình khai báo 1 danh sách như thế này

    Code:
    typedef int datatype;
    struct node
    {
             datatype data;
             node *next;
    };
    node *phead=NULL;
    dòng for(node*p=phead;p!=NULL;p=p->next) duyệt đến hết danh sach ..vậy thì làm sao để kiểm tra p->data lớn hơn phần tử liền trước và liền sau nó hả bạn ?
    1) Bạn có thể cho 1 con trỏ q chạy sau đuôi p . Là ta kiểm soát dc q , p và p->next
    2) Bạn dùng p->next->next . Với p là nút trước , p->next là nút giữa , p->next->next là nút sau .

  6. #6
    Ngày gia nhập
    03 2011
    Bài viết
    25

    Mặc định Tìm các phần tử tối đại trong danh sách số nguyên?

    mình dùng 2 vòng chạy for

    Code:
    for(node *phead ; p!=NULL; p=p->next )
      for(node *q=p->next ; q!=NULL ;q=q->next)
                       if( p->data > q->data )
                                 printf(" %d ",p->data);
    cái code ở trên chỉ mới kiểm tra dc lớn hơn so với phần tử liền sau nó , vậy còn phần tử ở phía trước ghi thế nào để kiểm tra dc hả bạn ? tks.

  7. #7
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Trích dẫn Nguyên bản được gửi bởi giacmo1612 Xem bài viết
    mình dùng 2 vòng chạy for

    Code:
    for(node *phead ; p!=NULL; p=p->next )
      for(node *q=p->next ; q!=NULL ;q=q->next)
                       if( p->data > q->data )
                                 printf(" %d ",p->data);
    cái code ở trên chỉ mới kiểm tra dc lớn hơn so với phần tử liền sau nó , vậy còn phần tử ở phía trước ghi thế nào để kiểm tra dc hả bạn ? tks.
    Hix, bạn dùng 2 vòng for là vừa bị dư mà lại "Tội nghiệp cái máy" . Bạn nên thương máy 1 chút , để nó chạy thế tội nó
    Với cả giải thuật đấy là để tìm những phần tử đứng sau và BÉ HƠN phần tử hiện tại . Ko đúng với yêu cầu của bài

    Thế này nhé
    C++ Code:
    1. node *q=phead, p=q->next; // Nhớ kiểm tra cái list phải có 3 nút trở lên
    2. for(q,p; p->next!=NULL; q=q->next )
    3. {
    4.                    if( p->data >= q->data && p->data >=p->next->data )
    5.                              printf(" %d ",p->data);
    6.                   p=q->next;
    7. }
    Còn ko thì thế này
    C++ Code:
    1. for(node *p=phead;p->next->next!=NULL;p=p->next)
    2.      if (p->next->data  mà lớn hơn của p->data và cả p->next->next->data)
    3.          thì xuất p->next->data ra ngoài;
    Đã được chỉnh sửa lần cuối bởi clchicken : 29-10-2011 lúc 10:38 AM.

  8. #8
    Ngày gia nhập
    03 2011
    Bài viết
    25

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Hix, bạn dùng 2 vòng for là vừa bị dư mà lại "Tội nghiệp cái máy" . Bạn nên thương máy 1 chút , để nó chạy thế tội nó
    Với cả giải thuật đấy là để tìm những phần tử đứng sau và BÉ HƠN phần tử hiện tại . Ko đúng với yêu cầu của bài

    Thế này nhé
    C++ Code:
    1. node *q=phead, p=q->next; // Nhớ kiểm tra cái list phải có 3 nút trở lên
    2. for(q,p; p->next!=NULL; q=q->next )
    3. {
    4.                    if( p->data >= q->data && p->data >=p->next->data )
    5.                              printf(" %d ",p->data);
    6.                   p=q->next;
    7. }
    Còn ko thì thế này
    C++ Code:
    1. for(node *p=phead;p->next->next!=NULL;p=p->next)
    2.      if (p->next->data  mà lớn hơn của p->data và cả p->next->next->data)
    3.          thì xuất p->next->data ra ngoài;
    thanks bạn nhiều nha

Các đề tài tương tự

  1. Nhập 1 dãy các số nguyên dùng danh sách liên kết trong C????
    Gửi bởi h_trang trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 08-04-2016, 02:04 PM
  2. Bài tập C Tạo danh sách liên kết các số nguyên tố từ danh sách L (dslk đơn)
    Gửi bởi pato24193 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 16-12-2012, 02:47 PM
  3. Xây dựng lớp đối tượng để chứa danh sách các phần tử số nguyên
    Gửi bởi trancongchau trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 20-03-2012, 02:50 PM
  4. In số nguyên chẵn nhỏ nhất trong danh sách?
    Gửi bởi tadenday trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 26-09-2011, 03:55 PM
  5. Tìm một phần tử có trong danh sách và thêm vào một phần tử mới ngay sau đó
    Gửi bởi nhantqt trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 22-04-2010, 11:35 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn