30/09/2018, 16:09

Cách làm ngắn gọn cho bài nối mảng chẵn ở đầu mảng và lẻ ở cuối?

Cho 2 mảng sốnguyên a và b kích thước lần lượt là n và m. Viết chương
trình nối 2 mảng trên thành mảng c theo nguyên tắc chẵn ở đầu mảng và lẻ
ởcuối mảng.
Ví dụ:

Mảng a:  3 2 7 5 9
Mảng b:  1 8 10 4 12 6 
Mảng c:  6 12 4 10 2 83 1 7 5 9

code của mình : http://codepad.org/NZ5t9fi4

#include<iostream>
#include<stdio.h>
#include<math.h>
#include "NhapMang.h"
using namespace std;
#define MAX 100

void NhapMangb(int b[], int &m){
	cout << "nhap so phan tu" << endl;
	cin >> m;
	for (int j = 0; j < m; j++){
		printf("b[%d] = ", j);
		scanf_s("%d", &b[j]);
	}
}
void TachMang(int a[], int n, int b[], int &m, int c[], int &v){
	int i = 0, j = 0, k =0;
	v = 0;
	for (i = 0; i < n; i++){
		if (a[i] % 2 == 0){
			c[v++] = a[i];
			k++;
		}
	}
	for (int j = 0; j < m; j++){
		if (b[j] % 2 == 0){
			c[v++] = b[j];
			k++;
		}
	}
	for (int i = 0; i < n; i++){
		if (a[i] % 2 != 0)
		{
			c[v++] = a[i];
			k++;
		}
	}
	for (int j = 0; j < m; j++){
		if (b[j] % 2 != 0){
			c[v++] = b[j];
			k++;
		}
	}
	for (int v = 0; v <k ; v++){
		cout << c[v] << "	";
	}
}

void main(){
	int a[MAX],b[MAX],c[MAX], n,m,v;

	NhapMang(n,a);
	NhapMangb(b, m);
	
	cout << "ket qua = ";
	TachMang(a, n, b, m, c, v);
	
	system("pause");
}

có cách nào làm khác mà ngắn hơn cách mình làm ko a?

viết 18:25 ngày 30/09/2018

Cũng chẳng biết có ngắn hơn không nhưng post lên bạn tham khảo thử:

#include <iostream>
using namespace std;

void swap(int* a,int* b)	{
	
	*a ^= *b ^= *a ^= *b;
}

void process(int* a, int left, int right)		{
	
	if(left >= right)
		return;
		
	int l = left, r = right;
	while(a[l] % 2 == 0)
		l++;
	
	while(a[r] % 2 == 1)
		r--;
		
	if(l < r)	{
		
		swap(&a[l],&a[r]);
	}
	process(a,l+1,r-1);
}

void output(int* a,int n)	{
	
	for(int i = 0; i < n; i++)	
		cout << a[i] << " ";
	cout << endl;
}

int main() {
	
	int m,n;
	cin >> m >> n;
	
	int* a = new int[m];
	int* b = new int[n];
	int* c = new int[m+n];
	int j = 0;
	
	for(int i = 0; i < m; i++)	{
		
		cin >> a[i];
		c[j] = a[i];
		j++;
	}
	
	for(int i = 0; i < n; i++)	{
		
		cin >> b[i];
		c[j] = b[i];
		j++;
	}
	
	j--;
	process(c,0,j);
	
	output(c,j);
	
	delete[] a;
	delete[] b;
	delete[] c;
	
	return 0;
}
Luannguyen viết 18:25 ngày 30/09/2018

swap là gì vậy bạn? mình chưa học đến cái này :ss

viết 18:17 ngày 30/09/2018

Là hoán vị đó bạn, nếu bạn thấy khó hiểu thì có thể sửa lại hàm hoán vị như sau:

void swap(int* a,int* b)     {
        int temp = *a;
        *a = *b;
        *b = temp;
}
Bài liên quan
0