Code trộn hai mảng một chiều tăng dần bị sai

Cụ thể nó khi nó trộn lại với nhau thì không xuất ra con số cuối cùng, mọi người giúp mình với
code:

 #include <stdio.h>
#include <limits.h>
    int a[100];
    int na;
    int nb;
    int nc;
    int b[100];
    int c[200];
    
void nhapmang(int a[], int &n){
	printf("Nhap vao n: ");
	scanf("%d", &n);
	for (int i = 0; i < n; i++){
		printf("Nhap vao x[%d]: ", i);
		scanf("%d", &a[i]);
	}	
}

void xuatmang(int a[], int &n){
	printf("\nCac gia tri vua nhap la: ");
	for (int i = 0; i < n; i++){
		printf("%d ", a[i]);
	}	
}

void tronhaimang(int a[], int n_a, int b[], int n_b, int c[], int &n_c){
	n_c = n_a + n_b;
	int ia = 0;
	int ib = 0;
	int ic = 0;
	while (ic < n_c){
		if(a[ia] < b[ib]){
			c[ic] = a[ia];
			ia++;
		} else if(a[ia] >= b[ib]){
			c[ic] = b[ib];
			ib++;
		} else if(ia == n_a){
			c[ic] = b[ib];
			ib++;
		} else if(ib == n_b){
			c[ic] = a[ia];
			ia++;
		}
		ic++;
	}
}

void sapxep(int a[], int n){
	for(int i = 0; i < n; i++){
		for(int j = i + 1; j < n; j++){
			if(a[i] > a[j]){
				int temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}
}

int main(){

	printf("\n--------\n");
	nhapmang(a, na);
	sapxep(a, na);
	xuatmang(a, na);
	printf("\n--------\n");
	nhapmang(b, nb);
	sapxep(b, nb);
	xuatmang(b, nb);
	printf("\n--------\n");
	tronhaimang(a, na, b, nb, c, nc);
	xuatmang(c, nc);	

	
}


Mọi người nhìn code trong đây cho rõ nha <3

Ráng học viết tiếng Việt và viết lại cái đề bài tập, để cho người khác hiểu bạn muốn làm cái gì đi bạn ơi

4 Likes

Bạn thử debug với mảng 1 phần tử xem:

--------
Nhap vao n: Nhap vao x[0]: 
Cac gia tri vua nhap la: 1 
--------
Nhap vao n: Nhap vao x[0]: 
Cac gia tri vua nhap la: 1 
--------
Cac gia tri vua nhap la: 1 0 

Bắt đầu với
while (ic < n_c)

lần chạy vòng lặp thứ nhất:
so sánh a[0] và b[0], sau đó
ia = 0;
ib = 1;
ic = 1;

ic vẫn nhỏ hơn 2, nên chạy tiếp lần lặp thứ hai:
so sánh a[0] và b[1] ???

2 Likes

Fix duoc roi cam on ban nhe

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