Chương trình con và lập trình có cấu trúc

Lê Huyền Trang

Cho dãy số nguyên a1, a2, ..., an, các số khác nhau từng đôi một (3 <= N <= 5000; với mọi i ta có |ai| <= 106). Bộ ba số ai, aj, ak (i <> j <> k) được gọi là Bộ tam hợp nếu có một số bất kỳ trong ba số đó bằng trung bình cộng của hai số còn lại.

Yêu cầu: Hãy đếm số lượng bộ tam hợp và tìm bộ tam hợp có tổng giá trị của ba số là lớn nhất.

Dữ liệu vào:

- Dòng 1 chứa số N;

- Dòng 2 chứa n số a1, a2, ..., aN cách nhau ít nhất một dấu cách

Kết quả:

- Dòng 1 ghi một số nguyên dương là số lượng bộ tam hợp tìm được;

- Dòng 2 ghi tổng giá trị ba số của bộ tam hợp là lớn nhất.

Ví dụ

Input

7

6 1 9 2 3 4 8

Output

5

18

(Ngôn ngữ lập trình C. Ai giúp em với ạ...em cảm ơn nhiều)

Just a bad coder
1 tháng 2 2020 lúc 20:57

#include <iostream>
#include <fstream>

using namespace std;

long int x[4],n,a[5001],kt[5001],ktvt[5001],MAXtong,dem=0;

int TRY(int i)
{
for(int j=x[i-1]+1;j<=n;j++)
if(kt[a[j]]==0)
{
x[i]=j;
kt[a[j]]=1;
if(i==3)
{

if(a[x[3]]==(float)(a[x[2]]+a[x[1]])/2||a[x[2]]==(float)(a[x[3]]+a[x[1]])/2||a[x[1]]==(float)(a[x[2]]+a[x[3]])/2)
{
dem++;
if(a[x[1]]+a[x[2]]+a[x[3]]>MAXtong)
{
MAXtong=a[x[1]]+a[x[2]]+a[x[3]];
}
}

}
else
TRY(i+1);
kt[a[j]]=0;
}
}
int main()
{
ifstream f("boba.inp");
f>>n;
for(int i=1;i<=n;i++)
{
f>>a[i];
}
x[0]=0;
MAXtong=-1000000000;
fill_n(kt,1001,0);
TRY(1);
cout<<dem<<endl;
if(dem>0)
{
cout<<MAXtong;
}
return 0;
}

Mình mới đạt tới trình độ quy hoạch động nên bạn thông cảm

Bình luận (0)
 Khách vãng lai đã xóa
Nguyễn Lê Phước Thịnh
1 tháng 2 2020 lúc 10:56

Xin lỗi bạn, mình không hỗ trợ C. mình chỉ biết pascal thôi

const fi='tamhop.inp';
fo='tamhop.out';
var f1,f2:text;
a:array[1..100]of integer;
n,i,j,k,dem,max,t:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
for i:=1 to n do
read(f1,a[i]);
{--------------------------------xu-ly--------------------------------}
dem:=0; max:=0;
for i:=1 to n-2 do
begin
for j:=i+1 to n-1 do
begin
for k:=j+1 to n do
begin
if (a[i]=(a[j]+a[k])/2) or (a[j]=(a[i]+a[k])/2) or (a[k]=(a[i]+a[j])/2) then
begin
inc(dem);
t:=a[i]+a[j]+a[k];
if max<=t then max:=t;
end;
end;
end;
end;
writeln(f2,dem);
writeln(f2,max);
close(f1);
close(f2);
end.

Bình luận (0)
 Khách vãng lai đã xóa

Các câu hỏi tương tự
Ngọc Diệp
Xem chi tiết
Mạnh Cường Đào Huỳnh
Xem chi tiết
Lê Thị Hà Giang
Xem chi tiết
Bùi Thị Ngọc
Xem chi tiết
Ecchi Long
Xem chi tiết
21321 3123ssqw
Xem chi tiết
Võ Văn Thái
Xem chi tiết
Đặng Công
Xem chi tiết
Pat
Xem chi tiết