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
Đề 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.
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
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
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
ở cái đk đó bạn, if(m==0), if(k==0), sửa lại mỗi chỗ đó thôi
I'll come back
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
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