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

Đề tài: giải giúp em 1 bài về mảng

  1. #1
    Ngày gia nhập
    06 2008
    Bài viết
    0

    Mặc định giải giúp em 1 bài về mảng

    Khai báo một mảng gồm N(với 0<N<100)phần tử, nhập giá trị cho các phần tử của mảng.
    yêu cầu: tính giá trị xuất hiện nhiều nhất được nhập vào.
    vd 1,1,1,2,3,3,4,5 --> 1 xuất hiện nhiều nhất.
    gợi ý khai báo hàm:
    void mode(int[], int [], int)
    hàm tính mode truyền vào 3 tham số
    +) tham số thứ nhất là mảng, mảng này lưu trữ số lần xuất hiện của các phần tử trong mảng lúc đầu.
    +)Tham số thứ 2 là một mảng lúc đầu
    +)Tham số thứ 3 là kích thước mảng

    các anh có thể giải giúp em bài này được không.
    cám ơn các anh nhiều

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    446

    Trích dẫn Nguyên bản được gửi bởi trytry Xem bài viết
    Khai báo một mảng gồm N(với 0<N<100)phần tử, nhập giá trị cho các phần tử của mảng.
    yêu cầu: tính giá trị xuất hiện nhiều nhất được nhập vào.
    vd 1,1,1,2,3,3,4,5 --> 1 xuất hiện nhiều nhất.
    gợi ý khai báo hàm:
    void mode(int[], int [], int)
    hàm tính mode truyền vào 3 tham số
    +) tham số thứ nhất là mảng, mảng này lưu trữ số lần xuất hiện của các phần tử trong mảng lúc đầu.
    +)Tham số thứ 2 là một mảng lúc đầu
    +)Tham số thứ 3 là kích thước mảng

    các anh có thể giải giúp em bài này được không.
    Đề bài không rõ ràng. Ví dụ, a,a,a,b,b,b thì giá trị nào (a hay b) xuất hiện nhiều nhất?

    Code:
    void mode(char mang[], int thongke[], int N)
    {
        int i;
        for(i=0; i<N; i++)
        {
            thongke[mang[i]]++;
        }
    }
    
    char xuathiennhieunhat(int thongke[], int N)
    {
        int i, imax=0, max=thongke[imax];
        for(i=0; i<N; i++)
        {
            if(max < thongke[i]) { max = thongke[i]; imax = i; }
        }
        return imax;
    }
    Đã được chỉnh sửa lần cuối bởi Ada : 05-06-2008 lúc 09:39 PM.

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Giải giúp "em" à? mời "em" vào đây
    Những bài tập như thế này rất đơn giản, chịu khó suy nghĩ chút đi, tặng em cái khai báo hàm hen: ^_^
    C Code: | Lựa chọn code | Ẩn/Hiện code |
    void mode(int m[100], int a[100], int N)


    Gợi ý chút hen. Có nhiều cách làm, nếu làm theo gợi ý của em là dùng hàm mode ở trên thì có thể làm như thế này: dùng for cho i chay để duyệt mảng a[], với mổi phần tử của a[] thì đếm số lần xuất hiện bằng cách dùng for cho j chạy để duyệt lại mảng a[], nếu a[j] == a[i] thì dem++. Sau khi đếm xong 1 phần tử a[i] thì gán nó vô m[]. Thực hiện xong hàm mode rồi thì mình có mảng m[] chứa số lần xuất hiện tương ứng với mổi phần tử của a[]. Tìm max của m[], phân tử nào của m[] mà max thì tương ứng phần tử đó bên mảng a[] là xuất hiện nhiều nhất.
    Làm thử rồi post code lên đây hen, bài này có thể làm chỉ bằng 1 hàm trả về phần tử xuất hiện nhiều nhất luôn, còn muốn làm theo cách dùng hàm mode của em thì có thể làm như trên.
    /* The thing that I think is the thing that I do. */

  4. #4
    Ngày gia nhập
    06 2008
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi Chautieu47 Xem bài viết
    Giải giúp "em" à? mời "em" vào đây
    Những bài tập như thế này rất đơn giản, chịu khó suy nghĩ chút đi, tặng em cái khai báo hàm hen: ^_^
    C Code: | Lựa chọn code | Ẩn/Hiện code |
    void mode(int m[100], int a[100], int N)


    Gợi ý chút hen. Có nhiều cách làm, nếu làm theo gợi ý của em là dùng hàm mode ở trên thì có thể làm như thế này: dùng for cho i chay để duyệt mảng a[], với mổi phần tử của a[] thì đếm số lần xuất hiện bằng cách dùng for cho j chạy để duyệt lại mảng a[], nếu a[j] == a[i] thì dem++. Sau khi đếm xong 1 phần tử a[i] thì gán nó vô m[]. Thực hiện xong hàm mode rồi thì mình có mảng m[] chứa số lần xuất hiện tương ứng với mổi phần tử của a[]. Tìm max của m[], phân tử nào của m[] mà max thì tương ứng phần tử đó bên mảng a[] là xuất hiện nhiều nhất.
    Làm thử rồi post code lên đây hen, bài này có thể làm chỉ bằng 1 hàm trả về phần tử xuất hiện nhiều nhất luôn, còn muốn làm theo cách dùng hàm mode của em thì có thể làm như trên.
    uhm. em cám ơn anh. em thì cũng mới chỉ học được sơ sơ nên dạng bài như thế này em tư duy kém lắm. Thêm nữa anh có tài liệu nào liên quan đến những dạng bài về mảng số nguyên không cho em với.
    - và cả những cái về vấn đề như: lệnh xóa và chèn phần tử vào mảng.
    em có bài này nữa anh có thể xem dùm và gợi ý. chắc là bài này cũng dễ nhưng em không có ai để hỏi tham khảo nên gửi cho các anh xem:

    +) Nhập vào một phần tử k? Tìm kiếm xem k có trong mảng hay không? Nếu có xóa tất cả các phần tử có giá trị bằng k đi.

  5. #5
    Ngày gia nhập
    06 2008
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi Chautieu47 Xem bài viết
    Giải giúp "em" à? mời "em" vào đây
    Những bài tập như thế này rất đơn giản, chịu khó suy nghĩ chút đi, tặng em cái khai báo hàm hen: ^_^
    C Code: | Lựa chọn code | Ẩn/Hiện code |
    void mode(int m[100], int a[100], int N)


    Gợi ý chút hen. Có nhiều cách làm, nếu làm theo gợi ý của em là dùng hàm mode ở trên thì có thể làm như thế này: dùng for cho i chay để duyệt mảng a[], với mổi phần tử của a[] thì đếm số lần xuất hiện bằng cách dùng for cho j chạy để duyệt lại mảng a[], nếu a[j] == a[i] thì dem++. Sau khi đếm xong 1 phần tử a[i] thì gán nó vô m[]. Thực hiện xong hàm mode rồi thì mình có mảng m[] chứa số lần xuất hiện tương ứng với mổi phần tử của a[]. Tìm max của m[], phân tử nào của m[] mà max thì tương ứng phần tử đó bên mảng a[] là xuất hiện nhiều nhất.
    Làm thử rồi post code lên đây hen, bài này có thể làm chỉ bằng 1 hàm trả về phần tử xuất hiện nhiều nhất luôn, còn muốn làm theo cách dùng hàm mode của em thì có thể làm như trên.
    Lần đầu tiên gửi bài lên forum mà có hiệu nghiệm tức thì à .
    uhm. em cám ơn anh.
    em thì cũng mới chỉ học được sơ sơ nên dạng bài như thế này em tư duy kém lắm. Thêm nữa anh có tài liệu nào liên quan đến những dạng bài về mảng số nguyên không cho em với.
    - và cả những cái về vấn đề như: lệnh xóa và chèn phần tử vào mảng.
    em có bài này nữa anh có thể xem dùm và gợi ý. chắc là bài này cũng dễ nhưng em không có ai để hỏi tham khảo nên gửi cho các anh xem:

    +) Nhập vào một phần tử k? Tìm kiếm xem k có trong mảng hay không? Nếu có xóa tất cả các phần tử có giá trị bằng k đi.

  6. #6
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Mặc định giải giúp em 1 bài về mảng

    Nhập vào một phần tử k? Tìm kiếm xem k có trong mảng hay không? Nếu có xóa tất cả các phần tử có giá trị bằng k đi.
    Vấn đề của bài này là xóa hết các phần tử bằng k. Thuật toán xóa phần tử trong mảng thật ra là dồn các phần tử phía sau "đè" lên nó, xong rồi giảm kích thước mảng.

    Ví dụ ta có mảng:

    N = 7
    1 2 3 2 1 4 6

    Nhập k = 2. Đầu tiên duyệt mảng, cho i chạy nếu a[i] == k thì xóa a[i] bằng cách dồn các phần tử sau nó đè lên a[i], sau đó giảm N xuống:

    N = 6
    1 3 2 1 4 6

    Làm như vậy i chạy tiếp cho tới hết mảng:

    N = 5
    1 3 1 4 6

    Những bài này em có thể search trên forum cũng đã có người hỏi rất nhiều rồi.
    C Code:
    1. void xoahetx(int a[], int &N, int x)
    2. {
    3.     int i, j;
    4.  
    5.     for(i = 0; i < N; i++)
    6.         if(a[i] == x)   {
    7.             for(j = i; j < N - 1; j++)
    8.                 a[j] = a[j + 1];
    9.             N--; i--;
    10.         }
    11. }
    Đã được chỉnh sửa lần cuối bởi Chautieu47 : 05-06-2008 lúc 10:50 PM.
    /* The thing that I think is the thing that I do. */

  7. #7
    Ngày gia nhập
    06 2008
    Bài viết
    0

    bài đầu tiên anh gợi ý cho em ấy.
    em viết thế này.
    em vẫn chưa hiểu được bài này.
    Anh có thể nói rõ hơn cho em được không.
    Mà anh có thể cho em Mail của anh để em tiện hỏi bài.
    Như đoạn code của em nó chỉ xuất hiện giá trị lớn nhất của mảng.

    void mode(int m[100],int a[100],int n)
    { int j,k;
    int temp=0,max;
    for(k=0;k<n-1;k++)
    for(int i=k+1;i<n;i++)
    {
    if(a[k]==a[i]);
    m[k]++;
    }
    max=m[0];
    for(k=1;k<n;k++)
    {
    if(m[k]>max)
    max=m[k];
    m[k]=a[k];
    temp=m[k];
    }

    printf("\ngia tri xuat hien nhieu nhat trong mang do la%d",temp);
    }
    vd nhập vào 1,2,1,2,1,5
    thì nó xuất hiện là 5
    Đã được chỉnh sửa lần cuối bởi trytry : 06-06-2008 lúc 01:17 PM.

  8. #8
    Ngày gia nhập
    10 2007
    Nơi ở
    TP. HCM
    Bài viết
    52

    Em đọc kỹ lại hen, những gì anh nói ở trên là như thế này:

    Theo ý em thì em sẻ xây dựng hàm mode:
    C Code:
    1. void mode(int m[100], int a[100], int N);
    Với tham số đầu tiên là m[], là mảng lưu trữ số lần xuất hiện của các phần tử trong mảng lúc đầu (mảng a[]).
    Như vậy, nếu ta xây dựng được hàm này thì ta sẽ biết được từng phần tử của mảng a[] xuất hiện bao nhiêu lần thông qua mảng m[]

    Ví dụ:
    mảng a[] = {1, 2, 1, 1, 3, 2}
    Khi gọi hàm mode, ta sẽ có mảng m[]
    mảng m[] = {3, 2, 3, 3, 1, 2}

    a[0] == 1 xuất hiện 3 lần nên m[0] = 3;
    tương tự:
    a[1] == 2 xuất hiện 2 lần nên m[1] = 2;
    a[2] == 1 xuất hiện 3 lần nên m[2] = 3;
    .................
    a[5] == 2 xuất hiện 2 lần nên m[2] = 2;

    Khi đã có mảng m[] rồi thì phần tử m[i] nào lớn nhất sẽ tương ứng với phần tử a[i] xuất hiện nhiều nhất.
    Như ví dụ trên, ta có
    m[0] == m[2] == m[3] == 3 lớn nhất, do đó phần tử
    a[0] == a[2] == a[3] == 1 là xuất hiện nhiều nhất.

    Cách xây dựng hàm mode thì có thể làm như sau:
    C Code:
    1. void mode(int m[100], int a[100], int N)
    2. {
    3.     int i, j, dem;
    4.  
    5.     for(i = 0; i < N; i++) {
    6.         /* voi moi ptu a[i] ta dem so lan xuat hien */
    7.         for(j = 0, dem = 0; j < N; j++)
    8.             if(a[j] == a[i]) dem++;
    9.         m[i] = dem;         // sau khi dem xong ptu a[i] thi gan gia tri vo m[i]
    10.     }
    11. }

    Tuy nhiên bản chất bài này rất đơn giản, không cần phải xây dựng hàm mode kia. Em có thể xây dựng 1 hàm trả về phần tử xuất hiện nhiều nhất luôn như sau:
    C Code:
    1. int xhnn(int a[100], int N)
    2. {
    3.     int i, j, t, dem, max;
    4.  
    5.     for(i = 0, max = 0; i < N; i++) {
    6.         for(j = 0, dem = 0; j < N; j++)
    7.             if(a[j] == a[i]) dem++;
    8.         if(dem > max) {
    9.             max = dem;
    10.             t = i;
    11.         }
    12.     }
    13.     return a[t];
    14. }
    Đã được chỉnh sửa lần cuối bởi Chautieu47 : 06-06-2008 lúc 02:06 PM.
    /* The thing that I think is the thing that I do. */

  9. #9
    Ngày gia nhập
    06 2008
    Bài viết
    0

    Em cám ơn anh nhiều ạ.
    bây giờ em mới hiểu được rõ cấu trúc này.
    Dịp nào em mắc bài nào đó anh lại giảng giải cho em nha

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

  1. Giải thích giúp Giải thuật Euclid (tìm ƯSCLN)
    Gửi bởi duoirong trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 15-04-2015, 12:06 PM
  2. Đệm nước - Gối nước: Mát mẻ - Êm ái - giúp cho giấc ngủ sâu hơn: Giải pháp cho mùa hè - tốt cho sức khỏe
    Gửi bởi aochoang_den04 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 08-06-2012, 10:36 PM
  3. Dùng thuốc giảm cân giúp bạn nhanh giảm cân
    Gửi bởi nhontq trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 27-02-2011, 04:46 PM
  4. viên giảm cân giúp giảm cân nhanh nhất
    Gửi bởi nhontq trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 15-01-2011, 11:46 AM
  5. Tài liệu SQL bài tập về SQL và đại số quan hệ không biết giải các bạn giải giúp mình với!
    Gửi bởi doanketct trong diễn đàn Tài liệu, ebooks DB
    Trả lời: 2
    Bài viết cuối: 02-07-2010, 07:38 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