viết chương trình pascal

Tiểu my

Học sinh chăm học
Thành viên
8 Tháng bảy 2016
78
13
96
21
[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Công ty kinh doanh vật tư nông nghiệp cần chọn một địa điểm kinh doanh trên tuyến đường N ki-lô-mét (km), vị trí đầu tuyến đường là km thứ nhất. Trên tuyến đường này, cứ mỗi km có hi (i=1..N) hộ dân sinh sống.Do điều kiện vận chuyển vật tư, công ty chỉ kinh doanh và phục vụ cho các hộ dân trong bán kính K km. Hãy giúp công ty chọn một địa điểm kinh doanh sao cho phục vụ được nhiều hộ dân nhất. (nếu có nhiều vị trí cùng phục vụ được nhiều hộ dân nhất như nhau thì chọn vị trí gần đầu đường nhất)
Ví dụ
Dữ liệu vào

- Nhập số km của tuyến đường N=6
- Nhập số hộ dân: 20 30 20 50 40 20
- Nhập số km bán kính K=1
Dữ liệu ra:
Vị trí km thứ: 4
Giải thích: Có hai vị trí ở km thứ 4 và thứ 5 cùng phục vụ được số dân nhiều nhất là 110,vị trí được chọn là 4 do gần đầu đường hơn.
 

Vuio

Học sinh chăm học
Thành viên
27 Tháng hai 2017
12
9
56
22
Bạn cứ cho lặp ngược từ cuối lên đầu, tính tổng khoảng (vt-k đến vt+k) rồi so sánh với max trước đó, nếu >max thì max bằng tổng và lưu vị trí đó lại.
Nhớ khai báo mảng A[-k..10000] nhiều nhiều vào.
 
  • Like
Reactions: huutoan00

Nguyễn Thánh Tiền

Mr Favoirite 2012
Thành viên
2 Tháng mười 2010
1,931
782
324
Hà Nội
cO VUA
Bài toán quy hoạch động dạng đơn giản nhỉ :)

Bạn cứ cho lặp ngược từ cuối lên đầu, tính tổng khoảng (vt-k đến vt+k) rồi so sánh với max trước đó, nếu >max thì max bằng tổng và lưu vị trí đó lại.
Nhớ khai báo mảng A[-k..10000] nhiều nhiều vào.


Anh nghĩ chả thì cần mảng A[-k..n] làm gì cho nó tốn bộ nhớ hihi

Thân
 
  • Like
Reactions: Vuio

Vuio

Học sinh chăm học
Thành viên
27 Tháng hai 2017
12
9
56
22
Theo anh sẽ xử lí thế nào khi không dùng mảng ?
 

Nguyễn Thánh Tiền

Mr Favoirite 2012
Thành viên
2 Tháng mười 2010
1,931
782
324
Hà Nội
cO VUA
Tổng khoảng (vt-k đến vt+k) =Tổng khoảng (vt-k-1 đến vt+k-1)-so(vt-k-`1) +so(vt+k)==>> vuA nhap vua tinh
 
  • Like
Reactions: Vuio

Tiểu my

Học sinh chăm học
Thành viên
8 Tháng bảy 2016
78
13
96
21
Bạn cứ cho lặp ngược từ cuối lên đầu, tính tổng khoảng (vt-k đến vt+k) rồi so sánh với max trước đó, nếu >max thì max bằng tổng và lưu vị trí đó lại.
Nhớ khai báo mảng A[-k..10000] nhiều nhiều vào.
Có phải thế này không ạ
uses crt;
var a: array[1..10000] of longint;
i,n,k,vt: longint;
max: longint;
begin
clrscr;
readln(n);
for i:=1 to n do
readln(a);
readln(k);
vt:=1;
for i:=1 to n do
max:=a[1]+a[1+k];
for i:=2 to n do
if ((a+a[i+k]+abs(a[i-k])) > max) then vt:=i;
writeln(vt);
end.
 

Vuio

Học sinh chăm học
Thành viên
27 Tháng hai 2017
12
9
56
22
Bạn nên xây dựng 1 hàm tính tổng các số từ vị trí x đến vị trí y như sau
function tong(x,y:longint):qword;
Sau đó mới ráp lại sẽ thấy dễ hiểu hơn.
 
  • Like
Reactions: Tiểu my
Top Bottom