30/09/2018, 23:24

Lỗi khi sắp xếp mái ngói ngược

#include <iostream>
#define MAX 100
using namespace std;

void nhapMang(int, int);
void xuatMang(int, int);

void hoanVi(int *, int *);
void sapXepGiam(int *, int);
void maiNgoiNguoc(int *, int);

void nhapMang(int arr[], int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << "arr[" << i << "] = ";
		cin >> arr[i];
	}
}

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

void hoanVi(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}

void sapXepGiam(int *arr, int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (arr[i] < arr[j])
				hoanVi(&arr[i], &arr[j]);
		}
	}
}

void maiNgoiNguoc(int *arr, int n)
{
	sapXepGiam(arr, n);
	for (int i = 0; i < n; i++)
	{
		hoanVi(&arr[n / 2], &arr[n - 1]);
	}
}

int main()
{
	int n, arr[MAX];

	cout << "Nhap n = ";
	cin >> n;

	nhapMang(arr, n);
	xuatMang(arr, n);

	maiNgoiNguoc(arr, n);
	xuatMang(arr, n);

	system("pause");
	return 0;
}
Sáng Béo viết 01:32 ngày 01/10/2018

Bạn không mô tả bài toán, hướng làm của bạn, và lỗi mắc phải?

Trần Long Vũ viết 01:31 ngày 01/10/2018

mình gặp phải lỗi ở hàm maiNgoiNguoc

Trần Long Vũ viết 01:34 ngày 01/10/2018

nhưng giờ thì tìm ra rồi

anon45952904 viết 01:28 ngày 01/10/2018

hoanVi(&arr[n / 2], &arr[n - 1]);

Có vẻ như bạn đang muốn làm thế này:

  #include <iostream>
#define MAX 100
using namespace std;

void nhapMang(int, int);
void xuatMang(int, int);

void hoanVi(int *, int *);
void sapXepGiam(int *, int);
//void maiNgoiNguoc(int *, int);

void nhapMang(int arr[], int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << "arr[" << i << "] = ";
		cin >> arr[i];
	}
}

void xuatMang(int arr[], int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << arr[i] << "\t";
	}
	cout << endl;
}

void hoanVi(int &a, int &b)
{

   int temp = a;
   a = b;
   b = temp;

}


void sapXepGiam(int *arr, int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (arr[i] < arr[j])
				hoanVi(arr[i], arr[j]);
		}
	}
}
/*
void maiNgoiNguoc(int *arr, int n)
{
	sapXepGiam(arr, n);
	for (int i = 0; i < n-1; i++)
	{
		hoanVi(arr[n], arr[n+1]);
	}
}
*/
int main()
{
	int n, arr[MAX];

	cout << "Nhap n = ";
	cin >> n;

	nhapMang(arr, n);
	xuatMang(arr, n);
	sapXepGiam(arr, n);

	//maiNgoiNguoc(arr, n);
	xuatMang(arr, n);

	system("pause");
	return 0;
}
Trần Long Vũ viết 01:29 ngày 01/10/2018

ko bạn.
Hàm này mình nghĩ là đúng rồi

hoanVi(&arr[n / 2], &arr[n - 1]);

mình bị sai chỗ bị thừa vòng lặp for này

void maiNgoiNguoc(int *arr, int n)
{
	sapXepGiam(arr, n);
	for (int i = 0; i < n; i++)
	{
		hoanVi(&arr[n / 2], &arr[n - 1]);
	}
}
anon45952904 viết 01:32 ngày 01/10/2018

Nếu task của bạn là sắp xếp ngược thì mình nghĩ bạn thừa hàm maiNgoiNguoc()

nhapMang();
xuatMang(); // vừa nhập
sapXepGiam();
xuatMang(); // xuất mảng mới

Mình chạy thấy nó hoàn thành task bình thường.
Mình cũng đang học nên trao đổi chơi

Trần Long Vũ viết 01:24 ngày 01/10/2018

bài này ko phải là sắp xếp theo mảng giảm dần mà là sắp xếp mảng theo hình mái ngói ngược

anon45952904 viết 01:27 ngày 01/10/2018

Ừ ha, hèn gì thấy cái hàm đó trông ngồ ngộ. Mình là thợ xây cũng lâu mà sao ko bít kiểu này ta

Bài liên quan
0