Đến nội dung

Hình ảnh

Lập trình Pascal

pascal

  • Please log in to reply
Chủ đề này có 200 trả lời

#121
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết

 

 

Đúng rồi code ngắn và hay

bạn thử bài này xem nếu không dùng cách nhân, chia các số lớn thì có thuật toán nào hay không nha? mình phải dùng chuong trinh nhân chia số lớn lên ct quá dài

Bài 1: (6 điểm)  Tìm số

Cho hai số nguyên dương N và M (2 ≤ N, M ≤ 109). Hãy tìm số nguyên dương K lớn nhất sao cho N! chia hết cho MK.

Dữ liệu vào: Từ tệp văn bản TIMK.INP, gồm một dòng duy nhất chứa 2 số nguyên dương N, M.

Kết quả: Đưa ra tệp văn bản TIMK.OUT, ghi số nguyên K tìm được.

n=6,m=6 thì k=2

 


 

 

ban nghethuat oi bạn có quy luật nào tính được không?



#122
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

Phân tích m về thừa số nguyên tố, rồi tìm ước thông qua các số nguyên tố đó!  nhưng mình vẫn chưa thể làm tối ưu hóa nó lên đc!

vd: n=20, phân tích thành 20=2,2,5 thì có các ước là 2, 5, 2*2=4, 2*5=10, 2*2*5=20( 1 thì bỏ qua). 



#123
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết

Phân tích m về thừa số nguyên tố, rồi tìm ước thông qua các số nguyên tố đó!  nhưng mình vẫn chưa thể làm tối ưu hóa nó lên đc!

vd: n=20, phân tích thành 20=2,2,5 thì có các ước là 2, 5, 2*2=4, 2*5=10, 2*2*5=20( 1 thì bỏ qua). 

 

Phân tích m về thừa số nguyên tố, rồi tìm ước thông qua các số nguyên tố đó!  nhưng mình vẫn chưa thể làm tối ưu hóa nó lên đc!

vd: n=20, phân tích thành 20=2,2,5 thì có các ước là 2, 5, 2*2=4, 2*5=10, 2*2*5=20( 1 thì bỏ qua). 

Bạn xem thử chương trình này nha
var M,N:longint;
fin,fout:text;
ptN:array[1..100000000] of longint; c_n:longint;
ptM:array[1..100000000] of longint; c_m:longint;
k:longint;
i,j,f:longint;
begin
assign(fin,'TIMK.INP');
assign(fout,'TIMK.OUT');
 
reset(fin);
read(fin,N); read(fin,M);
close(fin);
 
FillChar(ptM,sizeof(ptM),0);
FillChar(ptN,sizeof(ptN),0);
 
For i:=2 to N do
begin
j:=i; f:=2;
while j<>1 do
begin
If j mod f = 0 then 
begin
If j<100000000 then inc(ptN[f])
Else c_n:=j;
j:=j div f;
end
Else inc(f);
end;
end;
f:=2;
while M<>1 do
begin
If M mod f = 0 then 
begin
If j<100000000 then inc(ptM[f])
Else c_m:=M;
M:=M div f;
end
Else inc(f);
end;
 
For i:=2 to 100000000 do
If ptN[i]<>0 then writeln(i,' ',ptN[i]);
writeln;
For i:=2 to 100000000 do
If ptM[i]<>0 then writeln(i,' ',ptM[i]);
 
If (c_m<>0) and (c_m<>c_n) then k:=0
Else
begin
k:=0;
For i:=2 to 100000000 do
begin
If ptM[i]>ptN[i] then begin k:=0; break; end;
If ptM[i]<>0 then
If k=0 then k:=ptN[i] div ptM[i]
Else If ptN[i] div ptM[i] < k then k:= ptN[i] div ptM[i];
end;
end;
rewrite(fout);
write(fout,k);
close(fout);
end.
Bài này tớ làm sao báo lỗi không thực hiện được (giải thuật đệ quy)

Bài : Cho một xâu S (chỉ gồm các kí tự từ ‘0’ đến ‘9’, độ dài nhỏ hơn 10) và số nguyên M, hãy đưa ra một cách chèn váo s các dấu ‘+’,’-‘ để thu được số M cho trước

ví dụ: M=8, s=’123456789’ một cách chèn -1+2-3+4+5-6+7



#124
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

bài tìm k không nên làm thế, sẻ tốn 1 dữ liệu rất lớn đó, hôm trước có 1 anh đưa mình lời giải bài này, đợi lát mình tìm lại ,nếu thử đúng thì mình sẻ đăng lên :).



#125
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết


 

Cách này liệu có được không ban:

tuy nhiên còn phải viết hàm timd dư của hai số lớn

var s,tam: string; n,k,l,m,so1,so2,max,maxk: longint;

function phepnhan(s:string; b:longint): string;

var i: integer;

nguyen,n,so: longint;

s1,tam: string;

begin

s1:='';

nguyen:=0;

for i:=length(s) downto 1 do

begin

val(s[i],so);

n:=so*b+nguyen;

nguyen:= n div 10;

str(n mod 10,tam);

s1:=tam+s1;

end;

if nguyen>0 then

str(nguyen,tam)

else

tam:='';

phepnhan:=tam+s1;

end;

function gt(n:longint):string;

var sum:string; i:integer;

begin

sum:='1';

for i:=2 to n do

sum:=phepnhan(sum,i);

gt:=sum;

end;

Function Luythua(m,k: integer): string;

var i,j: integer;

lt,s: string;

begin

lt:='1';

for i:=1 to k do

lt:=phepnhan(lt,m);

luythua:=lt;

end;

begin

read(n,m);

//so1:=gt(n);

val(gt(n),so1);writeln(so1);

k:=0;  maxk:=0;

repeat

inc(k); max:=0;

//so2:=luythua(m,k);

val(luythua(m,k),so2);

if so1 mod so2=0 then // viet ham tim du cua hai so lon thay  o1 mod so2=0

begin

max:=k; writeln(so1, '  ',so2);writeln;

if max>maxk then

maxk:=max;

end;

until so2>so1;

//if max=maxk then

writeln(maxk);

//write(gt(n)); writeln;

//write(luythua(m,5));

readln;

readln

end.

 



#126
Super Fields

Super Fields

    Thiếu úy

  • Thành viên
  • 526 Bài viết

Viết chương trình nhập vào $2$ số $a,b$ rồi in ra giá trị $a,b$. Sau đó hoán đổi giá trị của $a,b$ rồi lại in giá trị $a,b$ ra màn hình


$\dagger$God made the integers, and else is the work of man.$\dagger$


$\boxed{\textrm{My Blog}}$


#127
Rai Yugi

Rai Yugi

    Lính mới

  • Thành viên
  • 1 Bài viết

Giúp mình giải bài này nha :icon6:  :icon6:  :icon6:  Khó quá  :wacko:  :wacko:  :wacko:

Bài toán Bình đẳng

Trong một công ty chia làm nhiều vị trí từ Tổng giám đốc đến nhân viên. Trong công ty tổ chức một bữa tiệc yêu cầu chúng ta tính số bàn ít nhất phải đặt sao cho các thành viên trong bàn đều không có ai là cấp trên hay cấp dưới của nhau. (đương nhiên là có thể chia số người không đồng đều nhưng phải đạt số bàn ít nhất)

Dữ liệu đầu vào gồm: n, k, m, mảng a

Trong đó: n là số người trong công ty

                 K là số người nhiều nhất mỗi bàn có thể có

                 M là số nhánh các bộ phận, tức là từ vị trí cao nhất(tổng giám đốc) chia ra làm m nhánh

                  Mảng a dùng để lưu ai là cấp dưới của ai.

Dữ liệu đầu ra: số bàn ít nhất

VD:   - Dữ liệu đầu vào:    10     5       3

           (minh họa giá trị của i)   1   2   3   4   5   6   7   8   9    10   (không có trong tệp chỉ số người và số 1 chính là người cao nhất các số                                                                                                            còn lại có thể thay đổi)

           (minh họa số liệu a[i])    0   1   1   1   2   2   3   3   3     4    (có trong tệp chỉ ai là cấp dưới của ai)

           -Dữ liệu ra: Số bàn ít nhất là 4   



#128
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

 

 

 

 chắc là ổn! tim hoai ma chang thay cái bai đo dau nua ,!



#129
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

Viết chương trình nhập vào $2$ số $a,b$ rồi in ra giá trị $a,b$. Sau đó hoán đổi giá trị của $a,b$ rồi lại in giá trị $a,b$ ra màn hình   

 chi la doan hoan doi : 
 c1:  su dung bien phu:  c:=a;a:=b;b:=c;

 c2: khong co bien phu : a:=a+b;b:=a-b;c:=a-b;



#130
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết


Giúp mình giải bài này nha :icon6:  :icon6:  :icon6:  Khó quá  :wacko:  :wacko:  :wacko:

Bài toán Bình đẳng

Trong một công ty chia làm nhiều vị trí từ Tổng giám đốc đến nhân viên. Trong công ty tổ chức một bữa tiệc yêu cầu chúng ta tính số bàn ít nhất phải đặt sao cho các thành viên trong bàn đều không có ai là cấp trên hay cấp dưới của nhau. (đương nhiên là có thể chia số người không đồng đều nhưng phải đạt số bàn ít nhất)

Dữ liệu đầu vào gồm: n, k, m, mảng a

Trong đó: n là số người trong công ty

                 K là số người nhiều nhất mỗi bàn có thể có

                 M là số nhánh các bộ phận, tức là từ vị trí cao nhất(tổng giám đốc) chia ra làm m nhánh

                  Mảng a dùng để lưu ai là cấp dưới của ai.

Dữ liệu đầu ra: số bàn ít nhất

VD:   - Dữ liệu đầu vào:    10     5       3

           (minh họa giá trị của i)   1   2   3   4   5   6   7   8   9    10   (không có trong tệp chỉ số người và số 1 chính là người cao nhất các số                                                                                                            còn lại có thể thay đổi)

           (minh họa số liệu a[i])    0   1   1   1   2   2   3   3   3     4    (có trong tệp chỉ ai là cấp dưới của ai)

           -Dữ liệu ra: Số bàn ít nhất là 4   

 có the giai thich them chut nua k,chu de viet khong hieu gì ca?



#131
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết

 chắc là ổn! tim hoai ma chang thay cái bai đo dau nua ,!

Bạn ơi không tìm được bài này a? Bài Tìm số, bạn cố tìm hộ mình xem nha



#132
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết

 

Xem hộ tui bài này nha

Có N điểm đảo được đánh số từ 1 đến N (N ≤ 1000) tại quần đảo Trường Sa. Mỗi điểm đảo được xác định vị trí bởi toạ độ là 2 số nguyên (xi,yi). Đài truyền hình Việt Nam quyết định xây dựng một trạm thu phát tín hiệu truyền hình để phục vụ quân và dân trên đảo. Để sử dụng một cách hiệu quả nhất người ta cần xây dựng trạm thu phát đó tại một điểm đảo sao cho khoảng cách từ trạm đến điểm đảo xa nhất là ngắn nhất có thể. Bạn hãy lập trình chỉ ra vị trí của điểm đảo cần đặt trạm.

Dữ liệu vào:Từ file văn bản BAI3.INP:

- Dòng đầu tiên ghi số điểm đảo N

- Các dòng tiếp theo mỗi dòng chứa 2 số nguyên xi và yi là toạ độ của điểm đảo.

Kết quả: Ghi vào file văn bản BAI3.OUT:

- Dòng thứ nhất ghi số thứ tự của điểm đảo đặt trạm.

- Dòng thứ 2 là toạ độ của điểm đảo đặt trạm

Ví dụ:

BAI3.INP

5

1 4

-3 6

-2 4

2 3

-13 23

BAI3.OUT

2

 

-3 6



#133
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết

Bài trường sa minh code thế này có hợp lí không ban nha?

 var x,y: array[1..100] of integer;

d,i,j,n,vt: integer;kc,minkc,tong:real; f:text;
begin
assign(f,'c:/toado.inp'); reset(f);
while not eof(f) do
begin
read(f,n);
for i:=1 to n do
read(f,x[i],y[i]);
end;
 
for i:=1 to n do
writeln(x[i],' : ',y[i]);
i:=1; d:=0; minkc:=100000;
while i<=n do
begin
kc:=0;
tong:=0;
for j:=1 to n do
begin
if i<>j then
kc:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
//writeln(kc:6:2);
tong:=tong+kc;
end;
if kc<minkc then
begin
minkc:=kc;
vt:=i;
end;
inc(i);
end;
write(' dat tai vi tri ',vt,' toa do ',x[vt],':',y[vt],' khoang cach min ',minkc:5:2);
readln;
readln
end.


#134
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết

xem hộ bài này với nha

Trong kỳ thi học sinh giỏi môn Tin học, em là người đạt giải đặc biệt. Ban tổ chức cho phép em chọn các phần thưởng cho mình. Các phần thưởng xếp thành một dãy được đánh số từ 1 đến N (0 ≤ N ≤ 10000), phần thưởng thứ i có giá trị là ai (1 ≤ ai ≤ 100). Em được phép chọn các phần thưởng cho mình theo nguyên tắc không chọn 3 phần thưởng liên tiếp nhau trong dãy. 
Viết chương trình để máy tính hướng dẫn em chọn các phần thưởng sao cho tổng giá trị của các phần thưởng nhận được là lớn nhất. 
Dữ liệu vào: cho file PTHUONG.INP gồm các dòng: 
- Dòng đầu tiên là số phần thưởng N 
- N dòng tiếp theo lần lượt là giá trị của các phần thưởng. 
Dữ liệu ra: ghi ra file PTHUONG.OUT gồm các dòng: 
- Dòng đầu tiên ghi tổng giá trị lớn nhất của các phần thưởng đã chọn 
- Dòng tiếp theo ghi vị trí của các phần thưởng đã chọn theo thứ tự tăng dần 
pthuong.inp 

6 9 1 3 5 10 4 
pthuong.out 
32 
1 2 4 6 7 



#135
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

Xem hộ tui bài này nha

Có N điểm đảo được đánh số từ 1 đến N (N ≤ 1000) tại quần đảo Trường Sa. Mỗi điểm đảo được xác định vị trí bởi toạ độ là 2 số nguyên (xi,yi). Đài truyền hình Việt Nam quyết định xây dựng một trạm thu phát tín hiệu truyền hình để phục vụ quân và dân trên đảo. Để sử dụng một cách hiệu quả nhất người ta cần xây dựng trạm thu phát đó tại một điểm đảo sao cho khoảng cách từ trạm đến điểm đảo xa nhất là ngắn nhất có thể. Bạn hãy lập trình chỉ ra vị trí của điểm đảo cần đặt trạm.

Dữ liệu vào:Từ file văn bản BAI3.INP:

- Dòng đầu tiên ghi số điểm đảo N

- Các dòng tiếp theo mỗi dòng chứa 2 số nguyên xi và yi là toạ độ của điểm đảo.

Kết quả: Ghi vào file văn bản BAI3.OUT:

- Dòng thứ nhất ghi số thứ tự của điểm đảo đặt trạm.

- Dòng thứ 2 là toạ độ của điểm đảo đặt trạm

Ví dụ:

BAI3.INP

5

1 4

-3 6

-2 4

2 3

-13 23

BAI3.OUT

2

 

-3 6

Bài bạn te st nó sai kìa :??? Cái vd của đề đó :?


Bài viết đã được chỉnh sửa nội dung bởi nghethuat102: 20-09-2014 - 22:18


#136
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

Bài tập ở đâu mà thấy bài nào cũng khó thế vậy bạn :? mình chẳng bik tìm ở đâu để làm luôn



#137
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

xem hộ bài này với nha

Trong kỳ thi học sinh giỏi môn Tin học, em là người đạt giải đặc biệt. Ban tổ chức cho phép em chọn các phần thưởng cho mình. Các phần thưởng xếp thành một dãy được đánh số từ 1 đến N (0 ≤ N ≤ 10000), phần thưởng thứ i có giá trị là ai (1 ≤ ai ≤ 100). Em được phép chọn các phần thưởng cho mình theo nguyên tắc không chọn 3 phần thưởng liên tiếp nhau trong dãy. 
Viết chương trình để máy tính hướng dẫn em chọn các phần thưởng sao cho tổng giá trị của các phần thưởng nhận được là lớn nhất. 
Dữ liệu vào: cho file PTHUONG.INP gồm các dòng: 
- Dòng đầu tiên là số phần thưởng N 
- N dòng tiếp theo lần lượt là giá trị của các phần thưởng. 
Dữ liệu ra: ghi ra file PTHUONG.OUT gồm các dòng: 
- Dòng đầu tiên ghi tổng giá trị lớn nhất của các phần thưởng đã chọn 
- Dòng tiếp theo ghi vị trí của các phần thưởng đã chọn theo thứ tự tăng dần 
pthuong.inp 

6 9 1 3 5 10 4 
pthuong.out 
32 
1 2 4 6 7 

Chỉ cần in ra 1 kết quả thôi phải không hè ??



#138
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết

Bài trường sa test sai a` ban? mình te st theo ví dụ đúng là vị trí thứ 2 và tọa độ là -3 6 mà

 còn bài phần thưởng chỉ cần in ra một kết quả là được bạn a?

mình có kho bài tập mình làm được gần 200 bài rồi 



#139
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

Bài trường sa test sai a` ban? mình te st theo ví dụ đúng là vị trí thứ 2 và tọa độ là -3 6 mà

 còn bài phần thưởng chỉ cần in ra một kết quả là được bạn a?

mình có kho bài tập mình làm được gần 200 bài rồi 

Bài phần thưởng dùng đệ quy quay lui thì phải ??


Bài viết đã được chỉnh sửa nội dung bởi nghethuat102: 21-09-2014 - 13:43


#140
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết

Vào lúc 20 Tháng 7 2014 - 15:22, hocpascal đã nói:snapback.png

Bác nào siêu pascal hộ em lời giải nha! Thanhk!

Bài 2: Số chữ số 0 tận cùng

          Tính số chữ số 0 tận cùng của N! = 1*2*3*...*N, với số nguyên dương N109.

          N nhập từ bàn phím, kết quả đưa ra màn hình gồm một số nguyên là số chữ số 0 tận cùng của N!  đã tìm được.

          Ví dụ: N=12 , kết quả đưa ra màn hình là 2.

 

     next...

var n,d,i:longint;
    begin
    repeat
    write('n=');
    readln(n);
    until (1<=n)and(n<=1000000000);
    if n div 10<>0 then begin d:=n div 10;i:=d;end;
    if n div 100<>0 then d:=d+(n div 100);
    if n div 1000<>0 then d:=d+(n div 1000)*2;
    if n div 10000<>0 then d:=d+(n div 10000)*3;
    if n div 100000<>0 then d:=d+(n div 100000)*4;
    if n div 1000000<>0 then d:=d+(n div 1000000)*5;
    if n div 10000000<>0 then d:=d+(n div 10000000)*6;
    if n div 100000000<>0 then d:=d+(n div 100000000)*7;
    if n div 1000000000<>0 then d:=d+(n div 1000000000)*8;
    if n mod 10>=5 then i:=i+1;
    d:=d+i;
    writeln(d);
    readln;
    end.
thuật toán này co vấn đề bạn ạ, nên mình sửa lại như này:
var n,d,i:longint;
    begin
    repeat
    write('n=');
    readln(n);
    until (1<=n)and(n<=1000000000);
    d:=0;
    i:=n;
    while i>=5 do
     begin
      d:=d+(i div 5);
      i:=i div 5;
     end;
     writeln(d);
    readln;
    end.






Được gắn nhãn với một hoặc nhiều trong số những từ khóa sau: pascal

1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh