Trang 1 trên tổng số 4 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 35 kết quả

Đề tài: [C] Bài tập về mảng

  1. #1
    No Avatar
    sonic33 Khách

    Mặc định [C] Bài tập về mảng

    mình đang có bài tập về mãng nhưng chỉ làm đc câu a các bạn có chỉ mình 2 câu b và c.
    Cho dãy n số nguyên a0,a1,…,an-1.
    a.Đếm xem trong dãy có bao nhiêu số bằng 0.
    b.Tìm độ dài của dãy con dài nhất gồm các phần tử liên tiếp toàn số 0.
    c.Tìm số lần xuất hiện của các số.
    Ví dụ:
    6 13 0 0 13 0 0 0 6 0 0 0 13 5 0 0 0 0 5
    Kết quả câu a là 12. Kết quả câu b là 4 Kết quả câu c là: số 6 xuất hiện 2 lần, số 13 xuất hiện 3 lần, số 0 xuất hiện 12 lần, số 5 xuất hiện 2 lần.

  2. #2
    Ngày gia nhập
    07 2006
    Bài viết
    121

    Bài a: k=0 duyệt từ vị trí thứ i=0 đến cuối mảng nếu thấy mảng[i]=0 thì tăng k lên một kết quả hết vòng lặp ta được kết quả là k lần số 0 xuất hiện trong mảng.

    Bài b:
    Max=0;
    temp=0;
    Duyệt từ i=0 đến cuối mảng:
    nếu mảng[i]=0 thì temp=temp+1;
    nếu mảng[i]!=0 thì{
    nếu temp>max thì max=temp;
    temp=0;
    }
    đến cuối mảng ta được temp và max so sánh lần nữa nếu temp>max thì max=temp;
    Đến cuối ta sẽ được giá trị max chính là kết quả của bài toán.
    Bài c:
    Nếu bạn sử dụng danh sách liên kết thì rất dể làm như thế này:
    Trong khi danh sách vẫn còn phần tử ta làm như sau:
    x= phần tử đầu danh sách.
    duyệt từ đầu danh sách đến cuối:
    Nếu thấy x trong danh sách thì tăng k sau đó xóa node_k;

    OoShinHaoO

  3. #3
    No Avatar
    sonic33 Khách

    bài C em vẫn chưa hiểu cách giải của anh lắm anh có thể nói rõ hơn đc ko

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mình cũng không hiểu ở câu C thì danh sách liên kết đơn gì đó mà shinichi đã nói chắc tại mình còn gà quá . Nhưng cũng có nghĩ ra 1 cách đơn giản thế này (chắc sẽ hơi dở )

    Đơn giản nhất thì lưu phần tử thứ nhất sau đó duyệt từ phần tử thứ 2 đến cuối coi xem nó xuất hiện bao nhiêu lần , sau đó tiếp tục tăng lên xét phần tử thứ 2 ...
    Tổng quát ta xét phần tử i với i chạy từ 0 ~> n-1 và duyệt từ j=i+1 ~> n
    điều kiện để xét là a[i] != a[0 ~> i-1] như thế thì chắc cũng được chỉ có điều hơi dài thôi !

  5. #5
    No Avatar
    sonic33 Khách

    em ngày cang rối về câu C,còn cách nào xét đơn giản nữa ko

  6. #6
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mặc định [C] Bài tập về mảng

    Mình thấy cách trên đơn giản mà ? Bạn thử nghĩ kĩ xem , bit đâu lại tìm ra hướng mới ?

  7. #7
    No Avatar
    sonic33 Khách

    mấy anh viết cho em cái thuật toán câu c dc ko.

  8. #8
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Viết cái thuật toán hả , là sao ? Ý U là cái code phải hông >
    Nếu là cái code thì để hôm nào kid viết thử xem chứ còn thuật toán thì kid có nói trên đó đấy .

  9. #9
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Câu c : pete có ý kiến thế này
    Code:
    1. Kiểm tra các giá trị của mảng A. Sau đó thiết lập mảng B có tính chất này :
       a. Các phần tử trong B khởi đầu = 0. 
       b. Độ lớn mảng B là giá trị lớn nhất trong mảng A : B[MAX] = maxofA
    2. Bắt đầu thực hiện phép đếm :
       
       a. Vòng lặp count = 0 -> last ( phần tử cuối cùng của A )
       b. B[A[i]]++
       c. hết vòng lặp thì in ra kết quả của mảng B , những giá trị nào của B = 0 thì kô in, chỉ in giá trị >0.
    Chú ý : Thuật toán trên chưa được tối ưu toàn phần nhưng đây là phép tính tấn suất cơ bản trong thuật toán. Hẳn là bạn nào học môn CTDL và Algorithm biết bài này.
    Mọi người cùng vào thảo luận nhé !
    None!

  10. #10
    No Avatar
    sonic33 Khách

    #include<iostream.h>
    #include<conio.h>
    void main()
    {
    clrscr();
    int a[100],n,i;
    cout<<"Nhap n: ";
    cin>>n;
    for(i=1;i<=n;i++)
    {
    cout<<"Nhap a["<<i<<"]: ";
    cin>>a[i];
    }
    int k=0;
    for(i=1;i<=n;i++)
    {
    if(a[i]==0)
    k++;
    }
    cout<<"Co "<<k<<" so 0";
    int max=0,temp=0;
    for(i=1;i<=n;i++)
    {
    if(a[i]==0)
    temp=temp+1;
    if(a[i]!=0)
    {
    if(temp>max)
    {
    max=temp;
    temp=0;
    }
    }
    }
    if(temp>max)
    max=temp;
    cout<<"\nDay dai nhat la: "<<max;

    getch();
    }
    chỉ giải đc 2 câu, các anh cho em ý kiến về 2 câu này

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