Bài tập Pascal: Mọi người cho ý kiến giúp

Trò chơi với băng số (Tên file Div.pas)
Cho một băng số gồm n số nguyên dương, mỗi số được viết trên một ô. Hãy cắt băng số này thành nhiều đoạn nhất sao cho tổng các phần tử trong các đoạn là bằng nhau.
Nhập vào : Từ bàn phím + Dòng đầu ghi n
+ Dòng tiếp theo ghi n số nguyên dương a[SUB]1[/SUB], a[SUB]2[/SUB], ..., a[SUB]n[/SUB]
(các số nằm trên một dòng cách nhau bởi một dấu cách, a[SUB]i[/SUB] ≤ 1000)
In ra : màn hình Ghi K là số đoạn cần chia.

10
2
6
2
5
2
1
2



10


2
6
2


5
2
1
2




Ví dụ:


Nhập
In ra
Giải thích
8
10 2 6 2 5 2 1 2
3

Đoạn 1: 10
Đoạn 2: 2 + 6 + 2 =10
Đoạn 3: 5 + 2 + 1 + 2 = 10
 

quanltv

Sư phụ của ADMIN
Đề bài này khó hiểu thế nhỉ, bạn cho vài ví dụ nữa đi. Ví dụ nhập 7 thì nó ra thế nào, mình chả tìm ra được :)
 

taplamhacker

♥ Thanh Trâm ♥
í tưởng
khởi tạo mảng. nhập mảng. khởi tạo biến dem=1
k=? . cho vòng lặp . 0 tới n-1 . nếu có phần tử nào = k thì in ra . xóa phần tử đó khỏi mảng. biến dem++
tạo hàm tính tổng lần lượt 1 mảng.
cho vòng lặp. từ 0 tới n-dem .tính tổng lần lượt
vd. i=0. a0+a1 so sánh vs k . khác k tính tiếp a0+a1+a2 ...
i=1. a1+a2 ...
nếu bằng k im ra xóa phần tử khỏi mảng. bé hươn cộng tiếp.
lớn hơn. a1+a2 > k bỏ qua a2. làm bước tính tiếp theo
nếu ai lớn hơn k thì continue :)
k biết code nó có tối ưu dc k . tại chưa có máy để test
 

latruongthinh

Gà nhất Forum
í tưởng
khởi tạo mảng. nhập mảng. khởi tạo biến dem=1
k=? . cho vòng lặp . 0 tới n-1 . nếu có phần tử nào = k thì in ra . xóa phần tử đó khỏi mảng. biến dem++
tạo hàm tính tổng lần lượt 1 mảng.
cho vòng lặp. từ 0 tới n-dem .tính tổng lần lượt
vd. i=0. a0+a1 so sánh vs k . khác k tính tiếp a0+a1+a2 ...
i=1. a1+a2 ...
nếu bằng k im ra xóa phần tử khỏi mảng. bé hươn cộng tiếp.
lớn hơn. a1+a2 > k bỏ qua a2. làm bước tính tiếp theo
nếu ai lớn hơn k thì continue :)
k biết code nó có tối ưu dc k . tại chưa có máy để test

1 Hacker diễn đàn cho biết ==:cll:
 
Đề bài này khó hiểu thế nhỉ, bạn cho vài ví dụ nữa đi. Ví dụ nhập 7 thì nó ra thế nào, mình chả tìm ra được :)
Ví dụ: nhập vào 5 thì gồm 5 phần tử:
Các phần tử cụ thể là: 1 2 3 4 5.
THì chia thành 3 đoạn, mỗi đoạn có tổng bằng 5.
Đoạn 1: 5
Đoạn 2: 2 3.
Đoạn 3: 1 4.
 
Theo mình thì sử dụng đệ quy. Nhưng sẽ khá là mất thời gian.

Xét các trường hợp từ chia thành K= 2->N đoạn.
 
thuật toán của m như này nhưng ko biết có ổn ko.
tìm max=số lớn nhất của dãy.
gán i:=1;a:=0;dem:=0;
repeat
a:=a+số thứ i (tạm gọi :d);inc(i);
nếu a=max thì begin inc(dem);a:=0 end;
nếu a>max thì begin max:=a;a:=0; i:=1;dem:=0 end;
until i>n ;
in ra kq là dem;

đây là thuật toán dạng thô các bạn hoàn thành và test thử. nếu có nỗi bảo m để m xem lại.
 
thuật toán của m như này nhưng ko biết có ổn ko.
tìm max=số lớn nhất của dãy.
gán i:=1;a:=0;dem:=0;
repeat
a:=a+số thứ i (tạm gọi :d);inc(i);
nếu a=max thì begin inc(dem);a:=0 end;
nếu a>max thì begin max:=a;a:=0; i:=1;dem:=0 end;
until i>n ;
in ra kq là dem;

đây là thuật toán dạng thô các bạn hoàn thành và test thử. nếu có nỗi bảo m để m xem lại.

Để mình test thử. Thanks bạn!
 
bác nào xem thử sai cái gì bổ xung giùm sao nhập 5 1 1 2 4 4 nó ghi không cắt được

uses crt;
var A:array[01..100] of integer;
hoa,l, b,h, sum,sum1,k, m,n,i : integer;

begin
clrscr;
write('nhap day so n= ');readln(n);
for i:=1 to n do begin
write('nhap so thu ', i, ' la' );readln(a); end;
i:=1;
sum1:=a[2]; h:=0;
sum:= a[1];
b:=1;
m:=0;
k:=0;
hoa:=0;

while i< n do
begin
i:=i+1;
if sum < sum1 then
begin

sum:=sum + a;
sum1:=a[i+1];
m:=1 +m;
if sum <> sum1 then
b:=1;

k:=k+1;

if hoa <> 0 then begin sum:=0; for l:=1 to i-2 do sum:= sum+a[l]; i:=k-1; end


end
else if sum > sum1 then
begin
hoa:=0;
sum1:=a[i+1]+sum1;
if sum1 <> sum then b:=1;
if sum < sum1 then begin sum:=sum+a; sum1:=a[i+1] end

end
else if sum= sum1 then

begin

sum1:=a;
b:=b+1;
m:=0;
hoa:=sum;


end
end;


if b=1 then
writeln(' khong cat dc') else writeln('co the cat');

writeln('so manh co the cat la ', b);

writeln('sum la ',sum);
writeln(sum1);
readln
end.
 
Sửa lần cuối:
Gjúp em vớj!
Nhập vào xâu s bất kì, yêu cầu:" sau dấu chấm là dấu cách, kí tự đầu tiên sau đó viết hoa. (sau dấu chấm có thể là nhjều dấu cách, số, ...). Chỉ sd kiến thức lớp 11 nhé! Cám ơn trk nha!
 
Gjúp em vớj!
Nhập vào xâu s bất kì, yêu cầu:" sau dấu chấm là dấu cách, kí tự đầu tiên sau đó viết hoa. (sau dấu chấm có thể là nhjều dấu cách, số, ...). Chỉ sd kiến thức lớp 11 nhé! Cám ơn trk nha!

Bạn thử làm như này xem sao nhá. Mình code = C còn bạn tự convert sang Pascal :cll:)

Gia sử bạn đã có chuỗi gán vào biến str rồi.

Mã:
for(int i = 0; i < strlen(str); i++){
    printf("%c", str[i]);

    if(str[i] == '.'){
        printf(" ");
    }
}
 
Top