Xóa k phần tử liên tiếp trong mảng, bắt đầu từ 1 vị trí x cho trước?

Em có bài tập như sau: Xóa k phần tử liên tiếp trong mảng, bắt đầu từ 1 vị trí x cho trước?

Em đã làm như thế này. Vấn đề là giải thuật của em nó chạy lòng vòng và em chưa biết cách giải quyết.

//==========================================================//
//=====================Câu 20===============================//
/*Xóa k phần tử liên tiếp vị trị ví x
*/
void xoaNhieuPhanTu(int a[], int &n, int viTriXoa,int soLuongXoa)
{
	for (int i = viTriXoa; i < n; i++)
	   {
		a[i] = a[i + 1];
	   }
	  n--;
	for (int i = viTriXoa; i < (soLuongXoa + viTriXoa )- 1; i++)
	  {
		xoaNhieuPhantu(a,n,i);
	  }
}

Code của em đâu @Kelvin_Nguy_n? Forum mình không giống như Facebook, em đưa bài tập cho người khác giải. Forum mình thảo luận để giúp em giải bài tập.

Trên forum có bài này nói về vấn đề hỏi bài tập khá hay. Và còn có một bài viết nói về cách đặt câu hỏi như thế nào

1 Like

http://codepad.org/B0XUh6a4 Do em đang làm 1 bài tập lớn. Bài này chỉ là 1 trong 32 bài em đang làm thôi. Nên code khá dài và nhiều,
Bài này nằm ở line 488-513

vào đây nè kevin

từ từ nhé đọc cái này xong rồi làm theo. forum mình theo hướng thảo luận để cùng học và giải đáp

Anh đã sửa nội dung lại rồi đấy, em thêm phần em bị lỗi chỗ nào nữa là được :smile:

1 Like

cay quá xíu làm mấy hàm thêm xoá cập nhật chèn mảng 1 chiều lun anh nhờ :frowning:

1 Like

ủa, sao em không thấy sữa gì hết :frowning:

A sửa lại cách trình bày câu hỏi của em cho nó dễ hiểu đấy Kelvin ơi :smiley: Anh có biết em bị lỗi gì đâu?

Nếu chung là bài này e chưa biết làm. A chỉ em làm với.Bí lắm luôn rồi :smile:

1 Like

À, tại cách suy nghĩ của em nó bị nhầm lẫn, anh cho em bài giải nhé. Không phải vì em bí mà anh cho bài giải, mà vì em đã làm, và làm không được anh mới đưa em bài giải :smile:

#include <stdio.h>

#define SIZE 10

void xoaNhieuPhanTu(int a[], int *n, int viTriXoa,int soLuongXoa)
{
    for(int i = viTriXoa; i < *n - soLuongXoa; ++i)
        a[i] = a[i+soLuongXoa];
    *n -= soLuongXoa;
}

int main()
{
    int a[SIZE] = {0,1,2,3,4,5,6,7,8,9};
    int n = SIZE;
    xoaNhieuPhanTu(a, &n, 3, 2);

    printf("Mang moi\n");
    for(int i = 0; i < n; ++i)
        printf("%d ", a[i]);
    return 0;
}

P/S: Em đặt tên biến, tên hàm rất tốt, dễ hiểu, anh thích em rồi đấy :heart_eyes:

3 Likes

Con trỏ chưa học anh ơi

1 Like

Thế em đổi con trỏ lại thành reference. Vì cái em đang học là C, nhưng thầy cô lại dạy C++. Tức là sử dụng dấu & (reference) hay còn gọi là tham chiếu.

Em cứ thay con trỏ bằng & nếu em thích và sử đụng như em hiểu. Anh chỉ dùng con trỏ để cập nhật lại giá trị của n.

Đây là code sử dụng & nếu em không biết cách chuyển, vì em chưa học con trỏ.

#include <stdio.h>

#define SIZE 10

void xoaNhieuPhanTu(int a[], int &n, int viTriXoa,int soLuongXoa)
{
    for(int i = viTriXoa; i < n - soLuongXoa; ++i)
        a[i] = a[i+soLuongXoa];
    n -= soLuongXoa;
}

int main()
{
    int a[SIZE] = {0,1,2,3,4,5,6,7,8,9};
    int n = SIZE;
    xoaNhieuPhanTu(a, n, 3, 2);

    printf("Mang moi\n");
    for(int i = 0; i < n; ++i)
        printf("%d ", a[i]);
    return 0;
}

Chú ý quan trọng: & mang ý nghĩa tham chiếu chỉ có trong C++, không có trong C.

4 Likes

Tức là những chổ nào có dấu * thay bằng & hả anh?

2 Likes

Anh đã update ở trên, em để ý nhé. Anh thích những câu hỏi rõ ràng, khó đến mấy anh cũng cố giải quyết (P/S: Khi anh nông nổi)

Chứ mấy câu @Honey_moon hỏi khó quá anh cũng không trả lời :trollface:

2 Likes

thực sự có 1 cách nữa là bạn tạo 1 mảng mới gồm những phần tử còn lại của mảng cũ :smiley: chả bjo thấy A Đạt khen em đặt tên hay code đẹp. em đặt tên biến con lạc đà cơ mà :trollface:

1 Like

khó với lười nó khác nhau. thông thường em bí mới dụ dỗ câu kéo lừa lọc thông đồng gọi anh thôi.

1 Like

Em còn đặt tên biến i,j,l,m,n,k, nữa không? Khen người mới chứ ai khen ma cũ :trollface:

I moved 2 posts to a new topic: sắp xếp các phần tử chẳn dồn về trước và xếp tăng dần, các phần tử lẽ về cuỗi mãng và cũng xếp tăng dần

biến i và j cho for biến n cho số lượng phần tử n=number còn lại là đặt dài. thế hàm hoán vị nhỏ mà a đặt dài loàng ngoàng à :smile:

1 Like

nếu viTriXoa = 6, soLuongXoa =5 thì sao nhỉ?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?