PDA

View Full Version : Tìm dãy con tổng = s



ninhxa123
22-07-2011, 17:34
Cho dãy a1,a2,..,an. Tìm dãy con có tổng =s
Dữ liệu vào nhập từ bàn phím, kết quả xuất ra màn hình

haplinhavxt
22-07-2011, 17:41
Bạn phải nêu giời hạn của n, yêu cầu các phần tử cuả dãy con mới có cách giải phù hợp chứ!

ninhxa123
22-07-2011, 21:06
Giới hạn n<=100, dãy a1,a2,...,a3 nguyên dương.

HGMinh95
23-07-2011, 09:14
Bài này bạn dùng QHĐ là ra thôi.
Mà sao bạn post linh tinh thế?

haplinhavxt
23-07-2011, 14:16
Nếu dãy con cần tìm là liên tiếp thì chẳng cần QHĐ đâu, chỉ tìm kiếm nhị phân thôi!

auauau97
23-07-2011, 16:54
Cho dãy a1,a2,..,an. Tìm dãy con có tổng =s
Dữ liệu vào nhập từ bàn phím, kết quả xuất ra màn hình

Mình làm thế này, không biết có đúng không nhỉ ?

Uses crt;
Var
a:array[1..100] of longint;
i,n,s,d,i2:longint;
BEGIN
Clrscr;
Write('Nhap so phan tu cua mang:');
Readln(n);
For i:=1 to n do
Begin
Write('Nhap a[',i,']:');
Readln(a[i]);
End;
Write('Nhap so s:');
Readln(s);
For i:=1 to n do
Begin
d:=a[i];
i2:=i;
For i:=1 to n do
If d+a[i]=s then
Begin
Writeln('a[',i2,']=',d);
Writeln('a[',i,']=',a[i]);
Readln;
Exit;
End;
End;
END.

Farmer_Boy
23-07-2011, 16:57
Mình làm thế này, không biết có đúng không nhỉ ?

Uses crt;
Var
a:array[1..100] of longint;
i,n,s,d,i2:longint;
BEGIN
Clrscr;
Write('Nhap so phan tu cua mang:');
Readln(n);
For i:=1 to n do
Begin
Write('Nhap a[',i,']:');
Readln(a[i]);
End;
Write('Nhap so s:');
Readln(s);
For i:=1 to n do
Begin
d:=a[i];
i2:=i;
For i:=1 to n do
If d+a[i]=s then
Begin
Writeln('a[',i2,']=',d);
Writeln('a[',i,']=',a[i]);
Readln;
Exit;
End;
End;
END.

Trời! ở trên có for i rồi, ở dưới còn chơi thêm for i nữa hả?

ninhxa123
23-07-2011, 20:37
sr mọi người nhé. tại lần đầu lập topic hơi bỡ ngỡ. có j` thông cảm nhé

auauau97
24-07-2011, 11:57
Trời! ở trên có for i rồi, ở dưới còn chơi thêm for i nữa hả?
Làm thế để xét từng trường hợp mà bạn ?
Bạn chạy mà xem,nó ra 1 dãy con đó có tổng =s đó !

Farmer_Boy
24-07-2011, 12:16
Sai rồi cưng, Free Pascal chạy báo lỗi, làm ơn test lại cho tui nhờ

auauau97
24-07-2011, 12:59
Sai rồi cưng, Free Pascal chạy báo lỗi, làm ơn test lại cho tui nhờ
Nó báo lỗi gì thế bạn ?
Để mình xem lại.
Thanks vì đã nhắc !

auauau97
24-07-2011, 13:08
Sai rồi cưng, Free Pascal chạy báo lỗi, làm ơn test lại cho tui nhờ
ừ đúng là FP báo lỗi thật, lỗi ở chỗ for i:=1 to n do thứ 2.
Sao Turbo pascal vẫn chạy ngon nhỉ ?
http://i.imgur.com/XKxkn.png

http://i.imgur.com/2xIvi.png
Để xem đã
HÌnh như sai thuật toán

haplinhavxt
24-07-2011, 17:46
ừ đúng là FP báo lỗi thật, lỗi ở chỗ for i:=1 to n do thứ 2.
Sao Turbo pascal vẫn chạy ngon nhỉ ?
http://i.imgur.com/XKxkn.png

http://i.imgur.com/2xIvi.png
Để xem đã
HÌnh như sai thuật toán
Sai là đúng rồi! FPC nó không cho 1 biến chạy trong 2 vòng for lồng nhau!
Bạn ko thể viết


For i:= 1 to n do
begin
for i:= 1 to x do
end;

Mà phải thay 1 trong 2 biến i bằng 1 biến khác i ví dụ như j chẳng hạn!
Còn thằng Turbo nó báo lỗi kém lắm!