Mình có đoạn code sau mà chỉ xuất ra được tích lớn nhất của 3 số nhưng mà tới khi xuất ra 3 số đó thì có không bị trùng hoặc có cái bị trùng
Đề kêu nhập vào n số nguyên với n<=30000,a[i]<=10000.Tìm 3 số sao cho tích của chúng là lớn nhất
#include <iostream>
using namespace std;
void nhap(int a[], int &n);
void xuat(int a[], int n);
void tich(int a[], int n);
int main()
{
int n,a[30000];
nhap(a,n);
xuat(a,n);
cout << endl;
tich(a, n);
cout << endl;
system("pause");
return 0;
}
void nhap(int a[], int &n)
{
do
{
cout << "\nNhap vao n so nguyen: ";cin >> n;
if (n > 30000)
cout << "\nMoi nhap lai dung yeu cau!";
} while (n > 30000);
for (int i = 0;i < n;i++)
{
cout << "a[" << i << "]= ";
cin >> a[i];
}
}
void xuat(int a[], int n)
{
cout << "Cac so trong day: ";
for (int i = 0;i < n;i++)
{
cout << a[i] << " ";
}
}
void tich(int a[], int n)
{
int max = 0, maxk = a[2], maxj = a[1], maxi = a[0];
for (int i = 0;i < n;i++)
{
for (int j = i + 1;j < n;j++)
{
for (int k = j + 1;k < n;k++)
{
if ((a[i] != a[j]) && (a[j] != a[k]) && (a[i] != a[k]))
{
int t = (a[i] * a[j] * a[k]);
if (max < t)
max = t;
}
if (maxk < a[k]) maxk = a[k];
}
if (maxj < a[j]) maxj = a[j];
}
if (maxi < a[i]) maxi = a[i];
}
cout << "Tich lon nhat trong day so: " << max << endl;
cout <<maxi<<" "<<maxj<<" "<<maxk;
}
Ai có thể góp ý cho mình được không ? Xin cảm ơn.



83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?