Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 9 của 9

Chủ đề: bài tập về mảng

  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    bài tập về mảng

    có bài này nhờ mọi người giúp:
    đề :Nhập vào một dãy số nguyên A gồm n phần tử (n ≤ 10).
    ý 1 : Nhập vào 1 số nguyên x. Tìm và in ra vị trí (các) phần tử gần x
    nhất.
    ý 2 : Sắp xếp các số âm trong dãy theo thứ tự giảm dần (không tăng)
    mà không làm thay đổi vị trí của các phần tử còn lại.
    ý 3 : Thống kê số lần xuất hiện của mỗi giá trị có mặt trong dãy.

  2. #2
    bài 3 thì trong diễn đàn có rồi, bạn tìm lại xem

  3. #3
    em tìm mỏi mắt mà hem thấy, a cho link thì tốt.
    bài 1 ,2 hem có ai giúp sao [IMG]images/smilies/Cry.gif[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Các bác cho ý kiến nhé:
    Mã nguồn PHP:
    #include<stdio.h> #include<math.h> main() { int a[100],i=0,min=abs(a[0]-a[1]),x,j,d,k,tmp,dem; printf("Nhap day so:
    "
    ); do { printf(""); scanf("%d",&a[i]); i++; } while(a[i-1]!=0);/*Nhap 0 de ket thu day*/ d=i-1; printf("Nhap x:"); scanf("%d",&x); for(j=0;j<=d;j++) { if(abs(a[j]-x)<=min)min=abs(a[j]-x); } for(j=0;j<=d;j++) { if(abs(a[j]-x)==min)printf("Cac phan tu gan x nhat la:a[%d]=%d
    "
    ,j,a[j]); } for(j=0;j<=d;j++) { for(k=j+1;k<=d;k++) { if(a[j]<0 && a[k]<0 && a[j]<=a[k]) { tmp=a[j]; a[j]=a[k]; a[k]=tmp; }} printf("%4d",a[j]); } printf("
    "
    ); printf("Tan suat xuat hien cua cac phan tu la:
    "
    ); for(j=0;j<=d;j++) { dem=0; for(k=0;k<=d;k++) { if(a[j]==a[k])dem++;} printf("a[%d] la %d
    "
    ,j,dem); } }  

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bài viết rất hay! nhưng chỗ min=abs(a[0]-a[1]) ý bạn là gán min bằng 1 số rất to, nhưng nếu khoảng cách x đến số gần nhất còn lớn hơn min thì ko được. [IMG]images/smiliesot_talking.gif[/IMG]
    có cách nào giải quyết hem nhi?

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Sửa:
    -đặt biến hieu=abs(a[j]-x)
    -dat bien max=0, tim max của hieu, tương tự như khi tìm min ở trên.
    -cho min=max, và tiếp tục làm như trên
    Đảm bảo rằng không có trường hợp nào trị tuyết đối từ x đến các phần tử lớn hơn min.
    Mã nguồn PHP:
    for(j=0;j<=d-1;j++) { hieu=abs(x-a[j]); if(hieu>=max)max=hieu; } min=max; for(j=0;j<=d-1;j++) { if(hieu<=min)min=hieu; } printf("%d
    "
    ,min);  

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Code như thế thì nếu mảng là 0 2 4 6 8 và x = 5 thì sẽ chỉ lấy được 6 thui, còn 4 thì ko.
    Tôi ngĩ nên dùng 2 biến là min_tren và min_duoi để làm đầy đủ hơn.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @IT :
    + Bài của bạn sẽ bị bug ở chỗ
    Mã nguồn PHP:
    min=abs(a[0]-a[1])  
    Vì khi đó a[0] và a[1] chưa được khởi gán.
    + Nếu đếm số lần xuất hiện như vậy nó sẽ in ra những câu trùng nhau. Ví dụ như dãy có 2 phần tử x thì nó sẽ in ra 2 lần số lần xuất hiện của x ( Giải pháp : Dùng mảng đánh dấu )
    + Nên viết thành hàm

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đâu bạn, mình chạy vẫn ra kết quả đúng mà.Nếu bạn nhập 0 2 4 6 8 thì không chạy được, vì tớ dùng 0 để kết thúc dãy, nên không được để số 0 ở đầu.

 

 

Quyền viết bài

  • 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ể Sửa bài viết của mình
  •