Follow us on...
Follow us on Twitter Follow us on Facebook Watch us on YouTube

Reviews hay rinh note 4, galaxy V được vi vu Hàn Quốc

Gameshow “Ai Là Triệu Phú” trên VTV đang chờ đón bạn – Tải ngay!

Lời mời tham dự chương trình từ thiện "Giáng Sinh Trong Mắt Em"

Mời offline công nghệ cùng Vn-Zoom tại Hà Nội

Chiêm ngưỡng BaoMoi đẹp "tuyệt diệu" trên Windows Phone

Mời offline công nghệ cùng VN-Zoom tại TP HCM
kết quả từ 1 tới 12 trên 12
  1. #1
    tranhuukhoa1997's Avatar
    tranhuukhoa1997 vẫn chưa có mặt trong diễn đàn Búa Gỗ
    Tham gia
    Dec 2010
    Bài
    14
    Cảm ơn
    7
    Điểm
    3/3 bài viết

    Red face Tìm phần tử được lặp lại nhiều nhất trong dãy số

    Tìm phần tử lặp lại nhiều nhất trong dãy n số nhập từ bàn phím
    Các bác giải giúp em gấp! Em sắp đi thi Tin học trẻ rồi
    Nếu có thì cho em luôn cái thuật toán !!!!
    ♥___It's me___♥

  2. #2
    19-6's Avatar
    19-6 vẫn chưa có mặt trong diễn đàn Moderator
    Tham gia
    Sep 2008
    Đến từ
    Abyss
    Bài
    1.904
    Cảm ơn
    858
    Điểm
    3.438/1.515 bài viết

    Default

    bạn có thể sắp xếp cho mảng tăng dần rồi sau đó tìm phần tử lặp lại nhiều nhất sẽ đơn giản hơn


  3. #3
    don't let go's Avatar
    don't let go vẫn chưa có mặt trong diễn đàn Thành viên đang bị kỷ luật
    Tham gia
    Sep 2009
    Bài
    204
    Cảm ơn
    42
    Điểm
    130/61 bài viết

    Default

    đây là chuơng trình tớ viết bạn muốn hiểu được thuật toán thì vào đây

    program find;
    var a:array[1..10000] of longint;
    f:array[1..10000] of integer;
    max,li,n:integer;
    procedure nhap;
    var i:integer;
    begin
    write('nhap n=');
    readln(n);
    for i:=1 to n do
    begin
    write('a[',i,']=');
    readln(a[i]);
    end;
    end;
    procedure qsort(l,r:integer);
    var tg,x,i,j:integer;
    begin
    tg:=a[(l+r) div 2];
    i:=l;
    j:=r;
    repeat
    while a[i]<tg do inc(i);
    while a[j]>tg do dec(j);
    if i<=j then
    begin
    x:=a[i];
    a[i]:=a[j];
    a[j]:=x;
    inc(i);
    dec(j);
    end;
    until i>j;
    if l<j then qsort(l,j);
    if i<r then qsort(i,r);
    end;
    procedure xuli;
    var i:integer;
    begin
    qsort(1,n);
    fillchar(f,sizeof(f),0);
    f[1]:=1;
    for i:=2 to n do
    begin
    if a[i]<>a[i-1] then f[i]:=1;
    if a[i]=a[i-1] then f[i]:=f[i-1]+1;
    end;
    max:=0;
    for i:=1 to n do
    if max<f[i] then
    begin
    li:=i;
    max:=f[i];
    end;
    end;
    procedure xuat;
    begin
    writeln('phan tu co so lan xuat hien lon nhat la:', a[li]);
    writeln('so lan xuat hien:',max);
    readln;
    end;
    begin
    nhap;
    xuli;
    xuat;
    end.
    Thay đổi nội dung bởi don't let go; 22-04-2011 lúc 11:56.

  4. Có 1 thành viên cảm ơn don't let go cho bài viết này:
    ckiuzk (15-10-2012)

  5. #4
    Tung_Huynh's Avatar
    Tung_Huynh vẫn chưa có mặt trong diễn đàn Cống hiến cho [V-Z]
    Tham gia
    Jul 2009
    Đến từ
    Thái Nguyên
    Bài
    6.776
    Cảm ơn
    1.540
    Điểm
    4.136/2.750 bài viết

    Default

    Nếu sắp xếp thì hơi dài nên mình ko sắp xếp mà đếm luôn

    Dùng 1 mảng phụ có số phần tử đúng bằng số phần tử của mảng kiểm tra
    Đếm số lần xuất hiện của từng phần tử trong mảng kiểm tra và lưu vào vị trí tương ứng trong mảng phụ
    Tìm max trong mảng phụ là ra kết quả
    Với cách này có thể 1 lần mà in ra được số xuất hiện nhiều nhất, ít nhất, mỗi số xuất hiện bao nhiêu lần,.....

    Code:
    var i,k,j,n,max:integer;
        b,st:array [1..100] of integer;
    begin
     write('Nhap so pt:');readln(n);
     for i:=1 to n do
      begin
       writeln('st[',i,']=');readln(st[i]);
      end;
     b[i]:=0;
     for i:=1 to n do
       for j:=i to n do
        if st[i]=st[j] then inc(b[i]);
     max:=b[1];
     for i:=1 to n do
      if b[i]>max then max:=b[i];
     write('So xuat hien nhieu nhat la ');
     for i:=1 to n do
      if max=b[i] then write(st[i],'  ');
     write('xuat hien ',max,' lan.');
     readln
    end.

  6. #5
    tranhuukhoa1997's Avatar
    tranhuukhoa1997 vẫn chưa có mặt trong diễn đàn Búa Gỗ
    Tham gia
    Dec 2010
    Bài
    14
    Cảm ơn
    7
    Điểm
    3/3 bài viết

    Default

    Em đi thi nên rất cần thời gian. Bài càng ngắn càng tốt, nhưng phải đúng yêu cầu. thanks các bác !!!
    ♥___It's me___♥

  7. #6
    don't let go's Avatar
    don't let go vẫn chưa có mặt trong diễn đàn Thành viên đang bị kỷ luật
    Tham gia
    Sep 2009
    Bài
    204
    Cảm ơn
    42
    Điểm
    130/61 bài viết

    Default

    Trích Tung_Huynh View Post
    Nếu sắp xếp thì hơi dài nên mình ko sắp xếp mà đếm luôn

    Dùng 1 mảng phụ có số phần tử đúng bằng số phần tử của mảng kiểm tra
    Đếm số lần xuất hiện của từng phần tử trong mảng kiểm tra và lưu vào vị trí tương ứng trong mảng phụ
    Tìm max trong mảng phụ là ra kết quả
    Với cách này có thể 1 lần mà in ra được số xuất hiện nhiều nhất, ít nhất, mỗi số xuất hiện bao nhiêu lần,.....

    Code:
    var i,k,j,n,max:integer;
        b,st:array [1..100] of integer;
    begin
     write('Nhap so pt:');readln(n);
     for i:=1 to n do
      begin
       writeln('st[',i,']=');readln(st[i]);
      end;
     b[i]:=0;
     for i:=1 to n do
       for j:=i to n do
        if st[i]=st[j] then inc(b[i]);
     max:=b[1];
     for i:=1 to n do
      if b[i]>max then max:=b[i];
     write('So xuat hien nhieu nhat la ');
     for i:=1 to n do
      if max=b[i] then write(st[i],'  ');
     write('xuat hien ',max,' lan.');
     readln
    end.
    tớ nói rồi nếu bài này mà n khá lớn 10000 chẳng hạn thì tốc độ bài bạn sẽ lớn hơn rất nhiều sô với cách mình .. mà trong thi pascal tốc độ càng nhanh thì càng điểm cao hơn .. nếu tốc độ nhanh hơn bài giải chuẩn sẽ đc cộng điểm đấy

  8. Có 1 thành viên cảm ơn don't let go cho bài viết này:
    ckiuzk (15-10-2012)

  9. #7
    ckiuzk's Avatar
    ckiuzk vẫn chưa có mặt trong diễn đàn Búa Gỗ Đôi
    Tham gia
    Sep 2009
    Bài
    29
    Cảm ơn
    18
    Điểm
    3/3 bài viết

    Default

    Trích don't let go View Post
    đây là chuơng trình tớ viết bạn muốn hiểu được thuật toán thì vào đây
    có vẻ thích trương trình con nhỉ

  10. #8
    dtc1151220048's Avatar
    dtc1151220048 vẫn chưa có mặt trong diễn đàn Búa Gỗ Đôi
    Tham gia
    Jul 2012
    Bài
    36
    Cảm ơn
    12
    Điểm
    2/2 bài viết

    Default

    bài này bạn có thể làm thei thuật toán sau:
    Dùng thêm 1 mảng B để đêm số phần tử của từng phần tử trong mảng A ban đầu với số phần tử của mảng B là giá trị lớn nhất của các phần tử trong mảng A. Sau đó khởi tạo các giá trị trong mảng B ban đầu =0. Tiếp theo duyệt từng phần tử trong mảng A và tăng giá trị tưng ứng của mảng các phần tử trong mảng B. Về code thì mình đang bận có lẽ chốc mềnh sẽ viết giờ lấy 1 VD luôn nhá:
    VD: mảng A: 4 7 2 2 3 2 14
    Mảng B có 14 phần tử (max trong mảng A là 14)
    tiếp theo duyệt từ đầu mảng A cho đến cuối
    for i:=1 to n do B[A[i]]:=B[A[i]]+1;
    Tức là ta có:
    B[4]=0+1
    B[7]=0+1
    B[2]=0+1
    B[2]=1+1=2
    B[3]=0+1
    B[2]=2+1=3
    B[14]=0+1;
    Và ta chỉ việc tìm max của mảng B ở đây là B[2]=3 và xuất ra giá trị 2 thôi. Nếu yêu cầu xuất ra số lần lặp thì đó là 3.

  11. Có 1 thành viên cảm ơn dtc1151220048 cho bài viết này:
    nvdung_a5k5lp (15-10-2012)

  12. #9
    dtc1151220048's Avatar
    dtc1151220048 vẫn chưa có mặt trong diễn đàn Búa Gỗ Đôi
    Tham gia
    Jul 2012
    Bài
    36
    Cảm ơn
    12
    Điểm
    2/2 bài viết

    Default

    Code mềnh đã viết xong, mọi ngươì tham khảo: Có gì sai sót mong mọi người chỉ giúp, Thanks!

    Code:
    var A,B:array[1..10000] of integer;
        i,n,maxa,maxb:integer;
    
    BEGIN
         write('Nhap so phan tu cua mang');
         readln(n);
         for i:=1 to n do
         begin
              write('phan tu thu ',i,': ');
              readln(A[i]);
         end;
         maxa:=a[1];
         for i:=2 to n do
             if maxa<A[i] then maxa:=A[i];
         for i:=1 to maxa do
             B[i]:=0;
         for i:=1 to n do
             B[A[i]]:=B[A[i]]+1;
         maxb:=B[1];
         for i:=2 to maxa do
             if maxb<B[i] then maxb:=B[i];
         writeln('Cac phan tu xuat hien nhieu nhat: ');
         for i:=1 to maxa do
             if maxb=B[i] then write(i:5);
         readln;
    
    END.

  13. #10
    unmatched1010's Avatar
    unmatched1010 vẫn chưa có mặt trong diễn đàn Rìu Bạc Đôi
    Tham gia
    Mar 2011
    Bài
    630
    Cảm ơn
    359
    Điểm
    129/110 bài viết

    Default

    bạn có thể dùng quick sort sau đó thu gọn mảng vd : a[] 11223334 --> 2-1 2-2 3-3 1-4. sau đó ta tìm max của số lượng phần từ xuất hiện nhiều nhất là được . như ví dụ trên thì max =3.

  14. #11
    aqwsed's Avatar
    aqwsed vẫn chưa có mặt trong diễn đàn Búa Đá Đôi
    Tham gia
    Mar 2011
    Bài
    113
    Cảm ơn
    13
    Điểm
    44/41 bài viết

    Default

    Trích dtc1151220048 View Post
    Code mềnh đã viết xong, mọi ngươì tham khảo: Có gì sai sót mong mọi người chỉ giúp, Thanks!

    Code:
    var A,B:array[1..10000] of integer;
        i,n,maxa,maxb:integer;
    
    BEGIN
         write('Nhap so phan tu cua mang');
         readln(n);
         for i:=1 to n do
         begin
              write('phan tu thu ',i,': ');
              readln(A[i]);
         end;
         maxa:=a[1];
         for i:=2 to n do
             if maxa<A[i] then maxa:=A[i];
         for i:=1 to maxa do
             B[i]:=0;
         for i:=1 to n do
             B[A[i]]:=B[A[i]]+1;
         maxb:=B[1];
         for i:=2 to maxa do
             if maxb<B[i] then maxb:=B[i];
         writeln('Cac phan tu xuat hien nhieu nhat: ');
         for i:=1 to maxa do
             if maxb=B[i] then write(i:5);
         readln;
    
    END.
    nếu mình nhập vào ko phải là số nguyên hoặc nếu số đó > 10000 thì bạn làm thế nào?

  15. Có 1 thành viên cảm ơn aqwsed cho bài viết này:
    dtc1151220048 (15-10-2012)

  16. #12
    dtc1151220048's Avatar
    dtc1151220048 vẫn chưa có mặt trong diễn đàn Búa Gỗ Đôi
    Tham gia
    Jul 2012
    Bài
    36
    Cảm ơn
    12
    Điểm
    2/2 bài viết

    Default

    Trích aqwsed View Post
    nếu mình nhập vào ko phải là số nguyên hoặc nếu số đó > 10000 thì bạn làm thế nào?
    Đúng là mình còn thiếu sót 2 điểm này. Bổ xung luôn 1 điểm yếu nữa là nhập số âm sẽ không ổn. .
    Trong TH đó thì mình cũng chỉ còn cách sắp xếp lại mảng và đếm như bên trên các bạn đã nói. Nếu có cách nào khác mong giúp đỡ.

 

 

Quyền sử dụng

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