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

Đề tài: Sắp xếp, đưa số dương lên đầu rồi đến số âm rồi đến số 0

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    5

    Mặc định Sắp xếp, đưa số dương lên đầu rồi đến số âm rồi đến số 0

    nhập một mảng n phần tử
    đưa số dương lên đầu rồi đến số âm rồi đến số 0
    mình mới thử đưa số dương lên đầu thôi mà mãi ko được ai jup với

    Code:
    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    	int i,j,n,sl,d,t,A[100];
    	printf("nhap so phan tu");
    	scanf("%d",&n);
    	for(i=0;i<n;i++)
    	 { printf("nhap phan tu A[%d]=",i+1);
    	   scanf("%d",&A[i]);
    	 }
    
    	 sl=n;d=0;
    	while(i<n)
    	{for (i=0;i<sl;i++)
    	      if(A[i]>0)
    		{t=A[d];
    		 A[d]=A[i];
    		 A[i]=t;
    		 sl=sl-1;
    		 d=d+1;}
             }
    
    	for(i=0;i<n;i++)
    	printf("%4d",A[i]);
    
    	 getch();
    }
    Đã được chỉnh sửa lần cuối bởi varius : 26-03-2009 lúc 10:57 AM. Lý do: cho dep

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Tham khảo thuật toán nhé, bài dưới cũng tương tự chỉ khác điều kiện

    C Code:
    1. //Chuyen so chan (khac 0) len dau, khong o giua le o cuoi.
    2. #include <stdio.h>
    3.  
    4. void chuyen(int a[],int n);
    5.  
    6. int main()
    7. {
    8.      int n=9,a[9]={1,0,3,3,4,2,5,0,7};
    9.      int i;
    10.      chuyen(a,n);
    11.      for (i=0;i<n;i++)
    12.           printf("%4d",a[i]);
    13. }
    14.  
    15. void chuyen(int a[],int n)
    16. {
    17.      int i,t1=0,t2=n-1;
    18.      for (i=t1;i<t2;i++)                     //su ly chan le
    19.      {
    20.           while (a[t1]%2==0)t1++;
    21.           while (a[t2]%2==1)t2--;
    22.           if (a[i]%2==1)
    23.           {
    24.                int b=a[i];
    25.                a[i]=a[t2];
    26.                a[t2]=b;
    27.                t2--;
    28.           }
    29.      }
    30.      t2=t1+1;t1=0;
    31.       for (i=t1;i<t2;i++)                   //su ly chan va so 0
    32.      {
    33.           while (a[t1]!=0)t1++;
    34.           while (a[t2]==0)t2--;
    35.           if (a[i]==0)
    36.           {
    37.                int b=a[i];
    38.                a[i]=a[t2];
    39.                a[t2]=b;
    40.                t2--;
    41.           }
    42.      }
    43. }

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

    ý tưởng của tui là khai báo thêm 1 mảng mới, đầu tiên gán toàn bộ số dương lên mảng. Sau đó ta tiếp tục gán toàn bộ số âm, và cuối cùng là số 0. Ko biết đúng hay sai.
    Cách hai là bạn khai báo 3 mảng luôn. Số dương gán vào 1 mảng, số âm cũng gán vào 1 mảng khác, 0 cũng vậy. Sau đó in ra 3 mảng.

    Code:
    #include <stdio.h>
    void NHAP(int ia[],int n);
    void XUAT(int ia[],int n);
    void sx(int ia[],int n);
    void NHAP(int ia[],int n)
    {
    	for(int i=0;i<n;i++)
    	{
    		printf("\nnhap so thu %d: ",i+1);
    		scanf("%d",&ia[i]);
    	}
    }
    void XUAT(int ia[],int n)
    {
    	for(int i=0;i<n;i++)
    		printf("%d   ",ia[i]);
    }
    void sx(int ia[],int n)
    {
    	int ib[100],i,j=0;
    	for(i=0;i<n;i++)
    			if(ia[i]>0)
    				{	
    					ib[j]=ia[i];
    					j++;
    				}
    	for(i=0;i<n;i++)
    			if(ia[i]<0)
    				{	ib[j]=ia[i];
    					j++;
    				}
    	for(i=0;i<n;i++)
    			if(ia[i]==0)
    				{	ib[j]=ia[i];
    					j++;
    				}
    	XUAT(ib,n);	
    }
    void main()
    {
    	int n,ia[100];
    	printf("\nnhap so phan tu: ");
    	scanf("%d",&n);
    	NHAP(ia,n);
    	XUAT(ia,n);
    	printf("\n");
    	sx(ia,n);
    }
    Đã được chỉnh sửa lần cuối bởi clementboy03 : 26-03-2009 lúc 05:13 PM.

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    ý tưởng của tui là khai báo thêm 1 mảng mới, đầu tiên gán toàn bộ số dương lên mảng. Sau đó ta tiếp tục gán toàn bộ số âm, và cuối cùng là số 0. Ko biết đúng hay sai.
    Cách hai là bạn khai báo 3 mảng luôn. Số dương gán vào 1 mảng, số âm cũng gán vào 1 mảng khác, 0 cũng vậy. Sau đó in ra 3 mảng.
    Nếu dùng mảng phụ thì: thêm một mảng duyệt 3 lần, thêm 3 mảng duyệt 1 lần.
    Dùng thêm một mảng vẫn là lợi hơn.

  5. #5
    Ngày gia nhập
    03 2009
    Nơi ở
    Tứ xứ trên đất sài thành
    Bài viết
    60

    không biết code này có làm đúng yêu cầu của bạn không? huy vong là đúng!!!. nếu không đúng thì trả lời một tiếng để mình sữa.
    Code:
    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    	int a[100],i,j,k,l,n;
       printf("Nhap vao so phan tu la(<100): ");
       scanf("%d",&n);
       for(i=0;i<n;i++)                 //Nhap mang
       {
       	printf("Phan tu %d: ",i+1);
          scanf("%d",a+i);
       }
       for(i=0;i<n-1;i++)          //sep day giam dan
       	for(j=i+1;j<n;j++)
          	if(a[i]<a[j])
             {
             	k=a[i];
                a[i]=a[j];
                a[j]=k;
             }
       for(l=0,i=0;i<n-l;i++) //kiem tra a[i]=0 thi dua xuonf cuoi mang
       	if(a[i]==0)
          {
          	++l;
             k=a[i];
             a[i]=a[n-l];
             a[n-l]=k;
          }
       printf("KQ: ");
       for(i=0;i<n;i++)
       	printf("%4d",a[i]);
       getch();
    }

    Càng Học Càng Ngu!!!Kiến thức thì vô tận con người thì vô biên thời gian thì vô đối????...

  6. #6
    Ngày gia nhập
    11 2008
    Bài viết
    116

    Mặc định Sắp xếp, đưa số dương lên đầu rồi đến số âm rồi đến số 0

    Trích dẫn Nguyên bản được gửi bởi QuangHoang Xem bài viết
    Tham khảo thuật toán nhé, bài dưới cũng tương tự chỉ khác điều kiện

    C Code:
    1. //Chuyen so chan (khac 0) len dau, khong o giua le o cuoi.
    2. #include <stdio.h>
    3.  
    4. void chuyen(int a[],int n);
    5.  
    6. int main()
    7. {
    8.      int n=9,a[9]={1,0,3,3,4,2,5,0,7};
    9.      int i;
    10.      chuyen(a,n);
    11.      for (i=0;i<n;i++)
    12.           printf("%4d",a[i]);
    13. }
    14.  
    15. void chuyen(int a[],int n)
    16. {
    17.      int i,t1=0,t2=n-1;
    18.      for (i=t1;i<t2;i++)                     //su ly chan le
    19.      {
    20.           while (a[t1]%2==0)t1++;
    21.           while (a[t2]%2==1)t2--;
    22.           if (a[i]%2==1)
    23.           {
    24.                int b=a[i];
    25.                a[i]=a[t2];
    26.                a[t2]=b;
    27.                t2--;
    28.           }
    29.      }
    30.      t2=t1+1;t1=0;
    31.       for (i=t1;i<t2;i++)                   //su ly chan va so 0
    32.      {
    33.           while (a[t1]!=0)t1++;
    34.           while (a[t2]==0)t2--;
    35.           if (a[i]==0)
    36.           {
    37.                int b=a[i];
    38.                a[i]=a[t2];
    39.                a[t2]=b;
    40.                t2--;
    41.           }
    42.      }
    43. }
    anh cho em hỏi cái bài sắp xếp chẵn lẻ, thì tại sao anh khai báo a[9]={1,0,3,3,4,2,5,0,7}, mình có thể nhập trực tiếp luôn mà. Còn nữa, anh có thể cho em biết ý tưởng của bài giải trên đc ko ? thank

  7. #7
    Ngày gia nhập
    04 2008
    Nơi ở
    HCMC
    Bài viết
    251

    C++ Code:
    1. a[9]={1,0,3,3,4,2,5,0,7}
    Cái này giúp bạn mỗi lần test ko mất bị mất thời gian nhập đi,nhập lại số.
    C++ Code:
    1. for(;;){cout<<"Busy"<<endl;}
    2. system("cls");
    Hãy ủng hộ cho quỹ phát triển cộng đồng C Việt
    http://congdongcviet.com/quyphattrien-congdongcviet.cpp

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    5

    cái nay ko dùng mảng fu mà bài nay chỉ yêu cầu cứ gặp số dương thì đưa lên đầu rồi đến số âm ,0 mà ko cần xắp xếp

  9. #9
    Ngày gia nhập
    03 2009
    Nơi ở
    Hà Nội
    Bài viết
    74

    Bài mình làm theo yêu cầu của bạn là không sử dụng mảng phụ đây:
    #include <stdio.h>
    int mang[10];
    int nhap(int *mag){
    int i=0;
    printf("nhap cac phan tu lien tiep cua mang va ket thuc bang mot ky tu khong phai la so:");
    while(scanf("%d",(mag++))){
    i++;
    }
    return i;
    }
    void doicho(int *x,int *y){
    *x+=*y;
    *y=*x-*y;
    *x=*x-*y;
    }
    int main(){
    int n,i,j,x;
    char a;
    n=nhap(&mang[0]);
    for(i=0;i<n-1;i++)
    for(j=i;j<n;j++){
    if(mang[i]==0) doicho(&mang[i],&mang[j]);
    else if((mang[i]<0)&&(mang[j]>0))
    {
    doicho(&mang[i],&mang[j]);
    }
    }
    for(i=0;i<n;i++) printf("%d ",mang[i]);
    }

  10. #10
    Ngày gia nhập
    04 2007
    Bài viết
    134

    Cũng góp thêm 1 cách

    C Code:
    1. for (int i = 0; i < n - 1; i++)
    2.     for (int j = i + 1; j < n; j++)
    3.         if (compare (a[i], a[j]) < 0) // a[i] < a[j]
    4.             swap (a[i], a[j]);

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

  1. làm sao Đưa web asp lên mạng
    Gửi bởi nghiapro2589 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 3
    Bài viết cuối: 25-09-2013, 10:23 PM
  2. Dịch vụ SEO lên top
    Gửi bởi timkiemvn002 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: 07-02-2013, 06:51 AM
  3. Tích hợp hệ thống định vị toàn cầu (GPS) lên xe đạp điện
    Gửi bởi khoagtvt 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: 01-01-2013, 12:05 AM
  4. khắc lên pha lê, in lên pha lê, in ảnh lên pha lê
    Gửi bởi whitecrystal 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: 13-12-2011, 11:34 AM
  5. Load csdl lên treeview được,nhưng không hiện lên textbox???
    Gửi bởi hieudiep trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 22-10-2009, 01:36 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