Mời các bạn cùng thảo luận và giúp đỡ mình ở bài số 2 với.
http://www.mediafire.com/view/?27bzadaik22bpls
Mời các bạn cùng thảo luận và giúp đỡ mình ở bài số 2 với.
http://www.mediafire.com/view/?27bzadaik22bpls
Được sửa bởi nino lúc 14:38 ngày 18-04-2013 Reason: sửa hộ cái link
Mình chưa post được link, ai đủ điều kiện thì giúp mình với.
Mọi người xem rồi giúp mình bài 2 với nhé. Cảm ơn các bạn đã quan tâm
các bạn thêm h t t p: // vào trước link và bỏ dấu () đi để tải về nhé. Giúp mình bài 2 với
http://www.mediafire.com/view/?ud4knk98r8vyfik
Được sửa bởi nino lúc 14:40 ngày 18-04-2013 Reason: sửa hộ cái link
Cảm ơn bạn nino đã sửa link giúp mình. Các bạn giỏi về thuật toán giúp mình với... Bài này mình cũng nát óc rùi.
Bạn có thể giải thế này:
- Ban đầu phải sắp xếp theo thời gian tăng dần.
Khởi tạo:
- Cần mảng flag để đánh dấu việc thứ i đã được làm hay chưa. Khởi tạo False
- Biến kq: số lượng máy khởi tạo = 0
Lặp các việc sau: (cho đến khi toàn bộ mảng được đánh dấu đã làm)
+ Cần thêm 1 máy
+ khởi tạo t = thời gian vào nhỏ nhất như sau:
i = 1
while (flag[i]=false) do
begin
i:=i+1
end
t = d[i]
+ for i:=1 to n:
if (flag[i]=False)and(d[i]>=t) then
begin
flag[i]=True
t = d[i] + t[i]
end
Đại khái thế, bạn hiểu ý mình sẽ code được
Mới suy nghĩ một lúc, thiếu sót gì ae thông cảm nha
bây h thì pó tay roài
bài 1 của mình đây, mọi người góp ý nhé
uses crt;
var time,K,N,S,i,j,x,y,z,dem:longint;
A:array[1..100001] of longint;
ok:array[1..100001] of boolean;
function nt(bienso:longint):boolean;
var i:longint;
begin
if bienso<2 then nt:=false else
begin
nt:=true;
for i:=2 to bienso div 2 do
if bienso mod i=0 then exit(false);
end;
end;
begin
clrscr;
write('nhap K:'); readln(k);
for i:=2 to K do
if nt(i)=true then
begin
dem:=dem+1;
A[dem]:=i;
ok[i]:=true;
end;
for i:=1 to dem do
if k mod A[i]=0 then
begin
writeln(A[i]);
break;
end;
for x:=1 to dem do
for y:=x to dem do
begin
if K-A[x]-A[y]>=A[y] then
begin
z:=K-A[x]-A[y];
if ok[z]=true then
begin
n:=n+1;
writeln(A[x],' ',A[y],' ',z);
end;
end;
end;
end.
bài 2 của mình đây,mấy bạn góp ý nhé
uses crt;
var N,i,j,sm,TG,max,vt:longint;
D,t,A:array[1..100]of longint;
ok:array[1..100]of boolean;
procedure doi(var x,y:longint);
var tam:longint;
begin
tam:=x;
x:=y;
y:=tam;
end;
procedure sapxep;
var i,j:longint;
begin
for i:=1 to N-1 do
for j:=i+1 to N do
if D[i]>D[j] then
begin
doi(D[i],D[j]);
doi(T[i],T[j]);
end;
end;
begin
clrscr;
write('nhap N:'); readln(N);
for i:=1 to N do
begin
write('nhap D, T: ');
readln(D[i],T[i]);
end;
fillchar(ok,sizeof(ok),true);
sapxep;
for i:=1 to N do
begin
if ok[i]=true then
begin
sm:=sm+1;
tg:=tg+T[i];
for j:=i+1 to N do
if tg<D[j] then
if D[j]+T[j]>max then
begin
ok[j]:=false;
max:=D[j]+T[j];
vt:=j;
end;
end;
tg:=0;
max:=0;
end;
write('so may can mua la: ',Sm);
end.
bài 3 mình đây, các bạn góp ý nhé
có thể tăng N lên nhưng phải xử lý số lớn
uses crt;
var the,A,M,N,i,j,dd,kq:longint;
function mu(a,b:longint):longint;
var i:longint;
begin
mu:=1;
if b>0 then
for i:=1 to b do mu:=mu*a;
end;
begin
clrscr;
write('nhap A, N, M:');
readln(A,N,M);
the:=A;
while A<>0 do
begin
dd:=dd+1;
A:=A div 10;
end;
if M>dd*mu(2,N) then write(F,'-1') else
begin
for i:=N downto 1 do
begin
if M>(dd*mu(2,i) div 2) then
M:=dd*mu(2,i)-M+1;
end;
kq:=(the div mu(10,dd-M)) mod 10;
write('chu so can tim la: ',kq);
end;
end.
Bookmarks