30/09/2018, 16:01

viết hàm trả về phần tử chẵn lớn nhất trong mảng có n phần tử bằng đệ qui

ad và các bạn giup hộ e bài này vs:
viết hàm trả về phần tử chẵn lớn nhất trong mảng có n phần tử bằng đệ qui. nếu ko tìm đc thì trả về -1.

Nguyễn Minh Dũng viết 18:13 ngày 30/09/2018
#include <stdio.h>

/*
 * int* array: mang phan tu
 * int n: so luong phan tu
 * int i: index
 * int* max: phan tu chan lon nhat
 *      max == -1 neu khong co phan tu lon nhat
 */
int chan_lon_nhat(int* array, int n, int i, int* max)
{
    if (i == n) // cuoi' mang?, return max
        return *max;
    int phan_tu = *(array + i);// lay phan tu vi tri i
    if ( phan_tu%2 == 0) // neu la so chan
        if (*max < phan_tu) // lon hon max
            *max = phan_tu; // cap nhat max

    return chan_lon_nhat(array, n, ++i, max); // tinh tiep voi ++i
}

int main()
{
    int array[] = {1,2,3,4,5,6,7,8,9}; // khoi tao mang
    int max = -1; // gan max bang -1
    // in ra
    printf("Phan tu chan lon nhat = %d",
           chan_lon_nhat(array,sizeof(array)/sizeof(int),0,&max));
    return 0;
}

Phạm Hoàng Tuấn viết 18:12 ngày 30/09/2018

Đây là cách mình được thầy Nguyễn Tấn Trần Minh Khang dạy, khá hay, bạn có thể tham khảo.

// ChanLonNhat_DeQuy.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"

int ChanLonNhat(int * a, int n);

int _tmain(int argc, _TCHAR* argv[])
{
	int *a;
	int n;
	std::cout << "Nhap n: ";
	std::cin >> n;
	a = new int(n);
	for (int i = 0; i < n; i++)
	{
		std::cout << "Nhap a[" << i << "] : ";
		std::cin >> a[i];
	}
	int temp = ChanLonNhat(a, n);
	if (temp == -1)
		std::cout << "Mang khong co so chan" << std::endl;
	else
	std::cout << " Ket qua: " << temp <<std::endl;

	system("pause");
	return 0;
}

int ChanLonNhat(int * a, int n)
{
	if (n == 0)
		return -1; //Mang rong, khong ton tai so chan
	if (n == 1)
	{
		if (a[0] % 2 == 0)
			return a[0];
		else
			return -1;
	}
	
	if (a[n - 1] % 2 == 0 && a[n - 1] > ChanLonNhat(a, n - 1))
		return a[n - 1];
	else
		return ChanLonNhat(a, n - 1);
			
}
TranPhuong viết 18:17 ngày 30/09/2018

hihi. cảm ơn add và các bạn.

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

add Dat oi, e ko hiểu câu lệnh lấy phân tử trong mảng. vs cả add dùng con trỏ nhưng ko dùng con trỏ có làm sao ko?. em sửa lại code của add cho e dễ hiểu tí.

#include<stdio.h>
#include<conio.h>

int Chan_lon_nhat(int A[],int n, int i,int max)
{
	if(i==n) return max;
	if((A[i]%2==0) && (A[i]>max)) max=A[i];
	return Chan_lon_nhat(A,n,++i,max);
}

int main()
{
	int A[]={1,2,3,4,5,6,7,8,9,10,11,13};
	int max=-1;
	printf ("\n Phan tu chan lon nhat trong mang: %d",Chan_lon_nhat(A,sizeof(A)/sizeof(int),0,max));
	
	getch();
	return 0;
}
Nguyễn Minh Dũng viết 18:04 ngày 30/09/2018

e ko hiểu câu lệnh lấy phân tử trong mảng

A[i] tương đương với *(array + i). Vậy là được rồi

dùng con trỏ nhưng ko dùng con trỏ có làm sao ko

À được, như vậy thì max không thay đổi giá trị, làm vậy cũng được. Sửa lại vậy là hiểu code rồi đó.

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

Người thảo luận để tìm ra cách giải hay cho một bài toán khó sẽ trở thành lập trình viên giỏi. Người hay hỏi bài tập thì không.

Nguyễn Minh Dũng viết 18:05 ngày 30/09/2018

Đó chính là cái mọi người ở http://daynhauhoc.com muốn hướng đến đó. Lần sau đặt câu hỏi nhớ thể hiện là mình đã nghiên cứu trước nha. Lần này xí xóa :))

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

hehe. tại e làm mãi ko ra. lần này xí xóa. ok ok. thank add!!!

Nguyễn Minh Dũng viết 18:09 ngày 30/09/2018

À, cho anh sửa thêm cái nữa.

Ad là viết tắt của admin. Admin là viết tắt của administrator. Add là động từ “thêm vào”
Anh tên Đạt, ở nhà mọi người hay gọi anh là ad cho nhanh, có nghĩa là Anh Đạt. Giờ lên FB ai cũng gọi ad thấy kỳ kỳ sao đó.

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

thì a là admin của diễn đàn còn gì. . còn cái add là e viết nhầm. ok?

Nguyễn Minh Dũng viết 18:04 ngày 30/09/2018

haha, thấy kỳ kỳ, em cứ ghi @ltd là anh sẽ được notify à

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

rồi rồi. lần nữa thank ad và các bạn.

Bài liên quan
0