Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Sắp xếp chẵn lẻ xen kẽ tăng dần

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    17

    Question Sắp xếp chẵn lẻ xen kẽ tăng dần

    Đề bài là cho 1 mảng 1 chiều và sắp xếp chẵn lẻ xen kẽ theo cặp tăng dần (theo các số chẵn và số lẻ) với số đầu tiên của dãy là số chẵn, mình biết là đề bài hơi khó hiểu nhưng nó là như này, các bạn hình dung nha.
    Cho 1 mảng như sau: 3; 4; 6; 8; 1; 4; 2; 6; 9 thì in ra kết quả là: 2;1;3;4;9;4;6;6;8.

    Ý tưởng của mình là duyệt các phần tử trong mảng, phần tử nào chẵn cho vào mảng chẵn, lẻ cho vào mảng lẻ, sau đó sắp xếp 2 mảng đó tăng dần và cuối cùng là đan xen 2 mảng chẵn lẻ vào nhau và code của mình như này, nó vẫn chạy, không báo lỗi nhưng không ra được kết quả :(

    Code:
    #include<conio.h>
    #include<stdio.h>
    int main()
    {
        int i,j,k=0,n,m=0,a[20],c[20],l[20],sc,p[20];
        printf ("Nhap so phan tu cua mang A: ");
        scanf ("%d", &n);
        for (i=0;i<n;i++)
        {
            printf ("A[%d] = ", i);
            scanf ("%d", &a[i]);
        }
        for (i=0;i<n;i++)
            if (a[i]%2==0)
            {
                         c[k]=a[i];
                         k++;
            }
            else
            {
                         l[m]=a[i];
                         m++;
            }
        for (i=0;i<k-1;i++)
        for (j=i+1;j<k;j++)
            if (c[i]>c[j])
            { 
               c[j] = c[j] + c[i];
               c[i] = c[j] - c[i];
               c[j] = c[j] - c[i];
            }
        for (i=0;i<m-1;i++)
        for (j=i+1;j<m;j++)
            if (l[j]<l[i])
            { 
               l[j] = l[j] + l[i];
               l[i] = l[j] - l[i];
               l[j] = l[j] - l[i];
            }    
        if (m=0)
        {
         printf ("\nMang ket qua la : \n");
         for (i=0;i<k;i++)
         printf ("%3d", c[i]);
        }
        else
            if (k=0)
            {
               printf ("\nMang ket qua la : \n");
               for (i=0;i<m;i++)
               printf ("%3d", l[i]);
            }
            else
             {        
               if (k>m)
                  {
                       sc=m;
                       j=0;
                       for (i=0;i<sc;i++)
                           {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                               p[j]=c[i];
                               p[j+1]=l[i];
                               j=j+2;
                           }
                       for (i=sc;i<k;i++)
                       p[j]=c[i];
                  }
               else 
                    {
                       sc=k;
                       j=0;
                       for (i=0;i<sc;i++)
                       {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                              p[j]=c[i];
                              p[j+1]=l[i];
                              j=j+2;
                       }
                       for (i=sc;i<m;i++)
                       p[j]=l[i]; 
                   } 
               printf ("\n Mang ket qua: \n"); 
               for (i=0;i<k+m;i++)
               printf ("%d", p[i]);
            }
        getch();
        return 0;
    }
    Đã được chỉnh sửa lần cuối bởi Pop : 13-08-2011 lúc 05:07 PM.

  2. #2
    Ngày gia nhập
    04 2011
    Nơi ở
    Heaven
    Bài viết
    90

    mình thật sự không hiểu cái đề nói một đằng bạn ví dụ một kiểu thật sự mình không hình dung được phải làm thế nào, đến cái ví dụ còn không khớp với cái đề sao mà mình sửa cho bạn được
    I'll come back

  3. #3
    Ngày gia nhập
    08 2011
    Bài viết
    17

    Trích dẫn Nguyên bản được gửi bởi stupid_genius Xem bài viết
    mình thật sự không hiểu cái đề nói một đằng bạn ví dụ một kiểu thật sự mình không hình dung được phải làm thế nào, đến cái ví dụ còn không khớp với cái đề sao mà mình sửa cho bạn được
    Mình biết là đề khó hiểu mà . Thật ra chẳng có đề cụ thể nào cả, là mình tự nghĩ ra đề và các bước làm là đúng như theo cái mình nghĩ đó. Cho vào 1 mảng, lọc các phần tử chẵn lẻ sang 2 bên, sắp xếp 2 mảng đó tăng dần, tiếp đến đan xen vào nhau. Mảng chẵn là a;b;c mảng lẻ là d;e;f;g thì kết quả là a;d;b;e;f;g, mảng kết quả không nhất thiếp phải là tăng dần.

  4. #4
    Ngày gia nhập
    04 2011
    Nơi ở
    Heaven
    Bài viết
    90

    Trích dẫn Nguyên bản được gửi bởi Pop Xem bài viết
    Mình biết là đề khó hiểu mà . Thật ra chẳng có đề cụ thể nào cả, là mình tự nghĩ ra đề và các bước làm là đúng như theo cái mình nghĩ đó. Cho vào 1 mảng, lọc các phần tử chẵn lẻ sang 2 bên, sắp xếp 2 mảng đó tăng dần, tiếp đến đan xen vào nhau. Mảng chẵn là a;b;c mảng lẻ là d;e;f;g thì kết quả là a;d;b;e;f;g, mảng kết quả không nhất thiếp phải là tăng dần.
    vậy thì quá đơn giản bạn à, giả sử mảng số lẻ là a, c, e; mảng số chẵn là b,d,f thì đầu tiên gọi một cái mảng phụ, với biến t là chỉ vị trí các phần tử trong mảng phụ. đầu tiên cho t=0, mỗi phần tử mảng a đẩy vào mảng phụ thì t+=2, rồi đến mảng chẵn bạn cho t=1, rồi lại t+=2 như vậy thì chẵn lẻ sẽ xen kẽ thôi. bạn thấy có được không
    I'll come back

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

    Trích dẫn Nguyên bản được gửi bởi stupid_genius Xem bài viết
    vậy thì quá đơn giản bạn à, giả sử mảng số lẻ là a, c, e; mảng số chẵn là b,d,f thì đầu tiên gọi một cái mảng phụ, với biến t là chỉ vị trí các phần tử trong mảng phụ. đầu tiên cho t=0, mỗi phần tử mảng a đẩy vào mảng phụ thì t+=2, rồi đến mảng chẵn bạn cho t=1, rồi lại t+=2 như vậy thì chẵn lẻ sẽ xen kẽ thôi. bạn thấy có được không
    Thì đúng là như vậy, mọi chuyện đơn giản nhwu vậy mà không hiểu sao code mình đâu có sai mà không ra. Như bạn nói thì bạn bị thiếu mất trường hợp không có số chẵn, không có số lẻ và trường hợp số lượng số chẵn và số lẻ không bằng nhau ...

  6. #6
    Ngày gia nhập
    04 2011
    Nơi ở
    Heaven
    Bài viết
    90

    Mặc định Sắp xếp chẵn lẻ xen kẽ tăng dần

    mình biết bài bạn sai chỗ nào rồi, đổ từng mảng vô thôi bạn, bạn đổ 2 mảng một lúc thì sai rồi
    I'll come back

  7. #7
    Ngày gia nhập
    04 2011
    Nơi ở
    Heaven
    Bài viết
    90

    ở cái đk đó bạn, if(m==0), if(k==0), sửa lại mỗi chỗ đó thôi
    I'll come back

  8. #8
    Ngày gia nhập
    04 2011
    Nơi ở
    Heaven
    Bài viết
    90

    sửa lại hoàn chỉnh cho bạn đây
    có thể có lỗi mình chưa phát hiện
    Code:
    #include<conio.h>
    #include<stdio.h>
    void swap(int& a,int& b);
    int main()
    {
        int i,j,k=0,n,m=0,a[20],c[20],l[20],sc,p[20];
        printf ("Nhap so phan tu cua mang A: ");
        scanf ("%d", &n);
        for (i=0;i<n;i++)
        {
            printf ("A[%d] = ", i);
            scanf ("%d", &a[i]);
        }
        for (i=0;i<n;i++)
            if (a[i]%2==0)
            {
                         c[k]=a[i];
                         k++;
            }
            else
            {
                         l[m]=a[i];
                         m++;
            }
        for (i=0;i<k-1;i++)
        for (j=i+1;j<k;j++)
            if (c[i]>c[j])
            { 
    			swap(c[i],c[j]);
            }
        for (i=0;i<m-1;i++)
        for (j=i+1;j<m;j++)
            if (l[j]<l[i])
            { 
               swap(l[j],l[i]);
            }    
        if (m==0)
        {
         printf ("\nMang ket qua la : \n");
         for (i=0;i<k;i++)
         printf ("%3d", c[i]);
        }
        else
            if (k==0)
            {
               printf ("\nMang ket qua la : \n");
               for (i=0;i<m;i++)
               printf ("%3d", l[i]);
            }
            else
             {        
               if (k>m)
                  {
                       sc=m;
                       j=0;
                       for (i=0;i<sc;i++)
                           {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
                               p[j]=c[i];
                               p[j+1]=l[i];
                               j=j+2;
                           }
                       for (i=sc;i<k;i++)
                       p[j]=c[i];
                  }
               else
                    {
                       sc=k;
                       j=0;
                       for (i=0;i<sc;i++)
                       {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                              p[j]=c[i];
                              p[j+1]=l[i];
                              j=j+2;
                       }
                       for (i=sc;i<m;i++)
                       p[j]=l[i]; 
                   }
    			                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
               
            }
    	printf ("\n Mang ket qua: \n"); 
    	for (i=0;i<k+m;i++)
            printf ("%6d", p[i]);
        getch();
        return 0;
    }
    void swap(int& a,int& b)
    {
    	int temp=a;
    	a=b;
    	b=a;
    }
    I'll come back

  9. #9
    Ngày gia nhập
    08 2011
    Bài viết
    17

    Trích dẫn Nguyên bản được gửi bởi stupid_genius Xem bài viết
    ở cái đk đó bạn, if(m==0), if(k==0), sửa lại mỗi chỗ đó thôi
    Uh nhỉ đúng rồi, mà tại sao nó lại không báo lỗi(mình dùng dev - c) làm mình không nhận ra sai sót ở chỗ nào

  10. #10
    Ngày gia nhập
    04 2011
    Nơi ở
    Heaven
    Bài viết
    90

    nhớ đưa hàm printf ra ngoài nha bạn, nếu không sẽ có lỗi đó, bài mình sửa cho bạn mình đã đưa ra ngoài rồi đó, bạn nhớ sửa nhé
    I'll come back

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

  1. Kỹ thuật C Nhập mảng nguyên sao cho chẵn tăng, lẻ giảm
    Gửi bởi lytieu_long550 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-08-2011, 07:19 PM
  2. Trộn hai mảng chẵn lẽ xen kẽ với nhau
    Gửi bởi prince7seas trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 21-07-2010, 11:56 PM
  3. Sắp xếp mảng theo chẵn lẽ và tăng dần trên C?
    Gửi bởi interpol_trinh 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: 21-04-2009, 10:11 PM
  4. Sắp xếp ma trận theo thứ tự tăng dần của các số chẵn rồi đến các số lẻ??
    Gửi bởi thanhtung0601 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 02-04-2009, 11:24 AM
  5. sắp xếp mảng số nguyên chẵn tăng dần, lẻ tăng dần, không dùng mảng tạm
    Gửi bởi hailoc12 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 09-08-2006, 11:44 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