Hỏi thuật toán của bài tập

Ai đó cho em hỏi về bài tập này.


Bài tập pascal cực khó , giải bằng ngôn ngữ khác cũng được, chủ yếu lấy cái thuật toán.
Cho mảng gồm 20 phần tử, chọn đại một phần tử ở giữa rồi tính tổng từ đó đến mảng phần tử a[1], rồi tính từ chỗ chọn đại đó đến phần tử mảng cuối cùng. Dữ liệu mảng có thể random hoặc nhập thủ công. Em làm thế này, không đúng, ai đó cho em ý kiến.

 program hello;
uses crt;
var i, tong, tong1: longint;
	a: array[1..20] of integer;
begin
	clrscr;
	tong:=0;
	tong1:=0;
	{ this is a comment
		for i:=1 to 20 do 
		begin
			write('Nhap phan tu so: ',i, ' cua mang a');
			readln(a[i]);
		end;
	}
	for i:=random(a[i]) to 20 do a[i]:=random(20);
	i:=0;
	for i:=random(a[i]) downto a[1] do
	begin
		tong:=tong+a[i];
	end;
	for i:=1 to a[20] do
	begin
		tong1:=tong+a[i];
	end;
	'
	begin
		writeln('Tong tu phan tu ', tong);
		writeln('Tong1 tu phan tu ', tong1);
	end;'
	readln;
end.

MapReduce thôi, có gì đâu

1 Like

can you show me what to do?

1 Like

[quote=“tuan.io, post:1, topic:57764”]
Bài tập pascal cực khó
[/quote]

var ViTriDuocChon: integer;
for i := 1 to ViTriDuocChon do
	tong := tong + a[i];
for i := ViTriDuocChon to 20 do
	tong1 := tong1 + a[i];
1 Like

Bạn phải gọi thêm randomize ở đầu chương trình (Sau begin ấy) để pascal khởi tạo bộ trộn số. Nếu không randomize thì khi gọi random(n) nó lúc nào cũng trả về 0.
Thứ hai, bạn nên biết là bài này yêu cầu 1 vị trí random cố định, nghĩa là chỉ lấy 1 lần random.
Code của bạn là lấy nhiều lần random nên mỗi lần sẽ cho vị trí khác nhau
Theo mình bạn nên thêm 1 viết VT (vị trí) để lưu random vị trí giữa. Rồi cho for tính tổng T1 từ vị trí 1 đến vt, rồi T2 từ vt đến hết.

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