30/09/2018, 22:29
Xin ý tưởng bài tìm số nguyên chẵn lớn nhất nhưng nhỏ hơi mọi giá trị lẻ
Anh/chi giup đỡ bài tập này em đang làm được một nửa rồi nhưng hết ý tưởng đây là bài tập khó của thầy nguyễn tấn trần minh khang
đề cho mảng một chiều các số nguyên hãy viết hàm tìm giá trị chẵn lớn nhất nhỏ hơn mọi giá trị lẻ có trong mảng:
#include<iostream>
#define max 100
using namespace std;
void nhapmang(int &n,int a[max])
{
cout<<"nhap so luong phan tu mang:";cin>>n;
for(int i=0;i<n;i++)
{
cout<<"a["<<i<<"]:";cin>>a[i];
}
}
int kiemtrachan(int n)
{
if(n%2!=0)
{
return 0;
}
return 1;
}
int kiemtrale(int n)
{
if(n%2==0)
{
return 0;
}
return 1;
}
int xuly(int n,int a[max],int &chan2)
{
int chan,le;
int i,dem=0,dem2=0,vitri;
for(int i=0;i<n;i++)
{
if(kiemtrachan(a[i])==1)
{
chan=a[i];
dem++
break;
}
}
for(i=0;i<n;i++)
{
if(kiemtrale(a[i])==1)
{
dem2++;
le=a[i]; // tim le bat ky o trong mang
break;
}
}
if (dem2==0||dem==0)
{
return 0;
}
for(i=0;i<n;i++)
{
if(kiemtrale(a[i])==1)
{
le=(a[i]<le?a[i]:le); // tim min le
}
}
for(i=0;i<n;i++)
{
if(kiemtrachan(a[i])==1)
{
chan=(a[i]>chan)?a[i]:chan; //tim max chan
}
if(chan<le)
{
chan2=a[i];
}
}
return chan2;
}
int main()
{
int n,a[max],chan2;
nhapmang(n,a);
xuly(n,a,chan2);
int x=xuly(n,a,chan2);
cout<<" "<<x;
}
Bài liên quan
Cách này có hay hơn ko nè.
Sort mảng tăng dần.
Tìm max số chẵn như bình thường và dừng khi gặp số lẻ đầu tiên.
theo mình không phải tìm lẻ đầu tiên ,mà tìm min lẻ ,cũng không phải max chẵn mà tùy trường hợp ví dụ như mảng a: 4 8 7 5 thỏa yêu cầu là 4 chứ không phải là 8 như bạn nói tìm max chẵn
cám ơn bạn nhiếu ý tưởng bạn rất hay
Bạn sort lại thì số lẻ đầu tiên chính là min lẻ đó bạn.
cám ơn bạn nhiều:heart_eyes:
bạn cho minh xin facebook của bạn làm quen có gì trao đổi trong học tập
Chạy hai vòng: tìm min lẻ (hàm này chắc bạn viết rồi) rồi vòng lại tìm tiếp. Bài này nên dùng sentinel cho cả hai vòng.
-Tạo int MaxChẵn = NULL; int MinLẻ=NULL;
-Nếu mảng A không có phần tử nào thì chửi sml thằng nhập số.
-Nếu A[0] là số chẵn, MaxChẵn = A[0] không thì MinLẻ = A[0];
-Cho chạy vòng for lần 1 để tìm Min lẻ:
@all: cái này là pseudocode
Với lại chỉ cần
A[0] < MinLe
là kq sai rồi.theo mình thì:
…
return
Theo mình thì nên kiểm tra chan < le k trước.
Tức a[i] là nếu là chẵn, a[i] <minle, thì duyệt tiếp xem a[i] đó có lớn hơn chẵn không.