ơ cái bạn này bạn phải nói sai cái gf người khác mới biết mà sủa chứ?
Mong mọi người sửa giúp mìnhCode:/* viet ham xoa cac phan tu tai vi tri le trong mang */ # include <stdio.h> # include <conio.h> void nhap_mang (int A[],int n) { for (int i=0;i<n;i++) { printf ("\n Nhap A[%d]: ",i); scanf ("%d",&A[i]); } } void xoa_vi_tri (int A[],int &n,int x) { for (int i=x;i<n;i++) A[i]=A[i+1]; n--; } void main() { int A[100],n; printf ("\n Nhap N:"); scanf ("%d",&n); nhap_mang(A,n); for (int i=0;i<n;i++) if (i%2==0) xoa_vi_tri(A,n,i); printf ("\n Mang sau khi xoa :"); for ( i=0;i<n;i++) printf ("%d ",A[i]); getch(); }
Đã được chỉnh sửa lần cuối bởi thangit : 03-08-2008 lúc 04:26 PM. Lý do: chưa để code vào tab
Rất mong được mọi người giúp đỡ :
Kiến thức mình biết chỉ là hạt cát trên sa mạc
ơ cái bạn này bạn phải nói sai cái gf người khác mới biết mà sủa chứ?
Em có thấy nắng vàng kỷ niệm
Hạ ngồi ru thanh thản những môi cười
Thuở ngồi ngóng tay choàng tay nỗi nhớ
Vin tay vào tháng năm chơi vơi...
bài của bạn sai do sau khi bạn xóa phần tử lẻ đầu tiên thì các phần tử lẻ còn ại dã thay đổi vị trái ko còn mang giá trị phần tử lẻ nữa , có 2 cách giải , 1 là bạn lấy tất ca các phàn tử chẵn gán vào 1 mảng thứ 2 rồi xuát ra mang 2 này , thứ 2 bạn làm theo cách của tôi :vừa trìn bày trên#include<stdio.h>
#include<conio.h>
int main()
{
int i,n,x,a[90];
printf("nhap so phan tu cua mang : ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("a[%d]",i);
scanf("%d",&a[i]);
}
i=1;
while(i!=n)
{
for(x=i;x<n;x++)
a[x]=a[x+1];
i++;
n--;
}
printf("mang sau khi xoa la:" );
for(i=0;i<n;i++)
printf("%8d",a[i]);
getch();
return 0;
}
Em có thấy nắng vàng kỷ niệm
Hạ ngồi ru thanh thản những môi cười
Thuở ngồi ngóng tay choàng tay nỗi nhớ
Vin tay vào tháng năm chơi vơi...
sory tui khong bit ban ah
mình gửi bạn cách dễ nhất này ^^
Code:/* viet ham xoa cac phan tu tai vi tri le trong mang */ #include <stdio.h> #include<alloc.h> #include <conio.h> void nhap_mang (int A[],int n) { for (int i=0;i<n;i++) { printf ("\n Nhap A[%d]: ",i); scanf ("%d",&A[i]); } } void xoa_vi_tri_le(int A[],int &n) { int *B,dem=0; B=(int*)malloc(n); for (int i=0;i<n;i++) { if(i%2==0) { B[dem]=A[i]; dem++; } } if(n%2!=0) n=n-dem+1; else n=n-dem; //editted -.-' for(i=0;i<n;++i) A[i]=B[i]; free(B); } void main() { clrscr(); int A[100],n; printf ("\n Nhap N:"); scanf ("%d",&n); nhap_mang(A,n); xoa_vi_tri_le(A,n); printf ("\n Mang sau khi xoa :"); for (int i=0;i<n;i++) printf ("%d ",A[i]); getch(); }
Đã được chỉnh sửa lần cuối bởi 6220119 : 04-08-2008 lúc 04:03 PM.
còn đây là code của bạn thangit sau khi sửa ^^
Code:/* viet ham xoa cac phan tu tai vi tri le trong mang */ # include <stdio.h> # include <conio.h> void nhap_mang (int A[],int n) { for (int i=0;i<n;i++) { printf ("\n Nhap A[%d]: ",i); scanf ("%d",&A[i]); } } void xoa_vi_tri (int A[],int &n,int x) { for (int i=x;i<n;i++) A[i]=A[i+1]; n--; } void main() { clrscr(); int A[100],n,dem=0; printf ("\n Nhap N:"); scanf ("%d",&n); nhap_mang(A,n); for (int i=0;i<n;i++) { if(dem%2==0) { if (i%2==1) { xoa_vi_tri(A,n,i); dem++; } } if(dem%2==1) { if (i%2==0) { xoa_vi_tri(A,n,i); dem++; } } } printf ("\n Mang sau khi xoa :"); for ( i=0;i<n;i++) printf ("%d ",A[i]); getch(); }
Bạn có thể tham khảo ý tưởng cách của 6xxx hoặc tự nghĩ ra cho mình 1 ý tưởng xắp xếp.
Coi mảng như là những cái hộp liên tiếp để chổng lên nhau.
nếu bạn lấy nếu bỏ đi 1 phần tử thì các phần tử khác sẽ bị dồn xuống
ok? bạn hiểu ý mình chứ ?
Về bài này :
cách của 6xxx là hiệu quả và đơn giản nhất (dùng mảng phụ). Bạn nên theo ý tưởng đó
Ngoài ra mình cũng nói luôn. Đề bài này rất dở, ko hay. Ví dụ bỏ thằng mảng[3] đi lập tức có thằng khác lại là mang[3].
Đề này theo mình nghĩ nó phải là xóa các số lẻ trong mảng đi thì hợp lý hơn.
^_,^
Facebook : https://www.facebook.com/langmaninternet
Bùi Tấn Quang
Có chút thắc mắc, bài của thangit phải hiểu như thế này:
gs: mảng ban đầu 0,1,2,3,4,5
Nghĩa 1:
xóa 1,3,5 còn lại: 0,2,4
hay Nghĩa 2:
xóa 1: 0,2,3,4,5.
xóa 3: 0,2,3,5.
Tôi nghĩ phải là theo cách thức thứ 2. Và nếu như thế thì cách của 6x ko còn đúng nữa. mà phải làm theo .
for(i:0->n/2
a[i] = a[i*2 -1];
hì kidkid nói đúng , mình chỉ để ý về ý tưởng nên quên mất. Ý tưởng của 6xxx là đưa vào mảng phụ. Cách này hiệu quả hơn và dễ hiểu hơn tuy nhiên có nhiều cái chưa đúng
ví dụ
void xoa_vi_tri_le(int A[],int &n)
nhưng lại gọi hàm thế này
xoa_vi_tri_le(A,n);
.....
thường theo mình thì khi giải thích 1 vấn đề cho mọi người chúng ta nên
+ Hoặc chỉ ra chỗ sai của code
+ Hoặc đưa ra ý tưởng
hì
...
^_,^
Facebook : https://www.facebook.com/langmaninternet
Bùi Tấn Quang