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

Đề tài: [Giúp] Sắp xếp các phần tử theo điều kiện

  1. #1
    Ngày gia nhập
    11 2012
    Bài viết
    1

    Mặc định [Giúp] Sắp xếp các phần tử theo điều kiện

    Đề bài yêu cầu : Nhập 1 mảng a rồi sắp xếp các số lẻ ở trước, số 0 ở giữa và số chẵn ở cuối..

    Em tách các số lẻ ra 1 mảng riêng.. rồi tách các số 0 ra 1 mảng riêng.. và số chẵn 1 mảng riêng rồi gộp 3 mảng lại vơi nhau theo thứ tự mà code em ghi ko biết lỗi gì nữa anh chị nào kiểm tra dùm em ..
    Code:
    #include<stdio.h>
    #include<conio.h>
    void nhap(int a[], int n)
    {
    	for( int i=0;i<n;i++)
    	{
    		printf("\nGia tri thu a[%d]= ",i);
    		scanf("%d",&a[i]);
    	}
    }
    void xuat(int a[], int n)
    {
    	for( int i=0;i<n;i++)
    		printf("%d   ",a[i]);
    }
    void tachsole(int a[], int &na, int b[], int &nb)
    {
    	nb=0;
    	for(int i=0;i<na;i++)
    	{
    		if(a[i]%2!=0)
                             {
    			b[nb]=a[i];
    		nb++; }
    	}
    }
    void tachsochan(int a[], int &na, int c[], int &nc)
    {
    	nc=0;
    	for(int i=0;i<na;i++)
    	{
    		if(a[i]%2==0) {
    			c[nc]=a[i];
    		nc++; }
    	}
    }
    void tachso0(int a[], int &na, int d[], int &nd)
    {
    	nd=0;
    	for(int i=0;i<na;i++)
    	{
    		if(a[i]==0) {
    		d[nd]=a[i];
    		nd++; }
    
    	}
    }
    
    void gopmang(int a[], int &na,int b[], int &nb,int c[], int &nc,int d[], int &nd)
    {
    	int k;
    	na=0;
    	for(int i=0;i<nb;i++)
    	for(int j=0;j<nc;j++)
    	for(int k=0;k<nc;k++)
    		{
    			a[na]=a[i];
    			a[na]=a[j];
    			a[na]=a[k];
    			na++;
    		}
    	xuat(a,na);
    }
    void main()
    {
    	int a[20],na,b[20],nb,c[20],nc,d[20],nd;
    	printf("\nNhap gia tri cua mang a ");
    	scanf("%d",&na);
    	nhap(a,na);
    	tachsole(a,na,b,nb);
    	tachso0(a,na,d,nd);
    	tachsochan(a,na,c,nc);
    	gopmang(a,na,b,nb,c,nc,d,nd);
    	getch();
    }
    Em cảm ơn nhiều !!
    Đã được chỉnh sửa lần cuối bởi taphoc_c : 14-12-2012 lúc 08:28 PM.

  2. #2
    Ngày gia nhập
    11 2012
    Bài viết
    1

    up top ai giúp em

  3. #3
    Ngày gia nhập
    11 2012
    Bài viết
    136

    C Code:
    1. void gopmang(int a[], int &na,int b[], int &nb,int c[], int &nc,int d[], int &nd)
    2. {
    3.     int k;
    4.     na=0;
    5.     for(int i=0;i<nb;i++)//ban xem lại chỗ for lồng này này thành nb*nc*nc phần tử rồi đâu còn là số phần tử mang
    6.     for(int j=0;j<nc;j++)
    7.     for(int k=0;k<nc;k++)
    8.         {
    9.             a[na]=a[i];
    10.             a[na]=a[j];
    11.             a[na]=a[k];
    12.             na++;
    13.         }
    14.     xuat(a,na);
    15. }
    với yêu cầu của đề theo mình bạn nên gộp việc tách làm 1 hàm thôi(sử dụng if else là tách ok mà), nhưng đôi khi để vậy cũng tốt . chỗ mà ghép trở lại nó không thể là for lồng được, giờ đang là số phần tử chẵn+lẻ+0=số phần tử mảng lại chuyển thành phép nhân số phần tử chẵn *le *0 > số phần tử của mảng. mà không thể gán chính mảng đó cho nó được mà phải là ban đầu được gán bằng các mảng tử được tách mà bạn tách ra cho vào mảng b,c,d chứ nhỉ .Bạn thử chuyển lại xem nào. ví dụ

    for(int i=0;i<nb;i++)
    a[na++]=b[i];
    for(int j=0;j<nc;j++)
    a[na++]=b[j];
    for(int k=0;k<nc;k++)
    a[na++]d[k];
    Giao lưu và học hỏi
    https://www.facebook.com/kimcy1992

  4. #4
    Ngày gia nhập
    02 2012
    Nơi ở
    hà nội
    Bài viết
    58

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. void nhap(int a[], int *n)
    4. {
    5.      printf("\nNhap gia tri cua mang a ");
    6.     scanf("%d",n);
    7.      int i;
    8.     for(i=0;i<*n;i++)
    9.     {
    10.         printf("\nGia tri thu a[%d]= ",i);
    11.         scanf("%d",&a[i]);
    12.     }
    13. }
    14. void xuat(int a[], int n)
    15. {
    16.      int i;
    17.      printf("\n");
    18.     for(i=0;i<n;i++)
    19.         printf("%d\t",a[i]);
    20. }
    21. void tachsole(int a[], int n,int b[],int *k)
    22. {
    23.     int i,j=0;
    24.     for(i=0;i<n;i++)
    25.     {
    26.         if(a[i]%2!=0)
    27.         {
    28.             b[j]=a[i];
    29.            j++;
    30.         }
    31.     }
    32.     *k=j;
    33.     // Viet them ham sapxep goi vao sap xep lai mang b
    34. }
    35. void tachsochan(int a[], int n,int b[],int *k)
    36. {
    37.     int i,j=0;
    38.     for(i=0;i<n;i++)
    39.     {
    40.         if(a[i]%2==0)
    41.         {
    42.             b[j]=a[i];
    43.            j++;
    44.         }
    45.     }
    46.     *k=j;
    47.     // Viet them ham sapxep goi vao sap xep lai mang b
    48. }
    49. // chu y co the viet hai ham tach so trong mot ham cho gon
    50. void gopmang(int a[],int b1[],int b2[], int n,int j,int k)
    51. {
    52.      int i,h=0;
    53.      for(i=0;i<j;i++)
    54.      a[i]=b1[i];
    55.      for(h=0;h<k;h++){
    56.      a[i]=b2[h];
    57.      i++;
    58.      }
    59.      xuat(a,n);
    60. }
    61. int main()
    62. {
    63.     int a[100],n,j,k;
    64.     nhap(a,&n);
    65.     xuat(a,n);
    66.     int b1[100];
    67.     tachsole(a,n,b1,&j);
    68.     int b2[100];
    69.     tachsochan(a,n,b2,&k);
    70.     gopmang(a,b1,b2,n,j,k);
    71.     getch();
    72. }
    Vẫn chưa được tối ưu cho lắm.
    + Quách Việt Kiên
    + Yahoo: Kaka_8x_vn
    + skype: kiencuongno1
    + Gmail: kiencuongno1@gmail.com
    Ai có thể free cho mình 50k thẻ điện thoại ko.

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

    C Code:
    1. int* reorder (int* array, int size ) {
    2.     int* index = malloc ( sizeof *index * size );
    3.     int index_iter = 0;
    4.     int i;
    5.     for ( i = 0; i < size; i++ ) {
    6.         if ( array[i] % 2 == 1 ) {
    7.             index[index_iter] = i;
    8.             index_iter ++;
    9.         }
    10.     }
    11.     for ( i = 0; i < size; i++ ) {
    12.         if ( array[i] == 0 ) {
    13.             index[index_iter] = i;
    14.             index_iter ++;
    15.             array[i] = 1;
    16.         }
    17.     }
    18.     for ( i = 0; i < size; i++ ) {
    19.         if ( array[i] % 2 == 0 ) {
    20.             index[index_iter] = i;
    21.             index_iter ++;
    22.         }
    23.     }
    24.     return index;
    25. }

    Code mình chưa test, lưu ý là các giá trị trong mảng nhập vào sẽ bi thay đổi, nên tốt nhât là gọi theo kiểu :
    mang = reorder (mang, size );
    với mang là con trỏ mảng động
    (p.s: mình thay đổi giá trị trong mảng để tiết kiếm 1 vòng lặp thôi, thêm vòng lặp nữa thì ko cần đổi giá trị trong mảng )

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

  1. Duyệt cây nhị phân theo mức, giúp mình!
    Gửi bởi thuha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 14
    Bài viết cuối: 17-10-2015, 07:32 PM
  2. Trả lời: 6
    Bài viết cuối: 31-07-2013, 07:51 PM
  3. sắp xếp tên sách theo thứ tự abc, giúp em sủa bài này với
    Gửi bởi hathao_tb trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 05-01-2013, 12:01 PM
  4. Phần Euler và phần duyệt theo chiều rộng (DFS) chạy sai kết quả?
    Gửi bởi hoangde102 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: 09-05-2012, 09:37 AM
  5. Giúp em bài in tam giác theo thứ tự n
    Gửi bởi magicmumy 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: 30-10-2008, 12:04 AM

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