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.
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
#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;
}
Đâ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);
}
hihi. cảm ơn add và các bạn.
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;
}
A[i]
tương đương với *(array + i)
. Vậy là được rồi
À đượ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 đó.
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.
Đó 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 :))
hehe. tại e làm mãi ko ra. lần này xí xóa. ok ok. thank add!!!
À, 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 đó.
thì a là admin của diễn đàn còn gì. . còn cái add là e viết nhầm.
ok?
rồi rồi. lần nữa thank ad và các bạn.