Đến nội dung

Hình ảnh

TOPIC: Tổng hợp bài tập PASCAL


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

#1
PlanBbyFESN

PlanBbyFESN

    Thiếu úy

  • Điều hành viên OLYMPIC
  • 637 Bài viết
 

Bài tập 1: Số nguyên tố rút gọn của một số tự nhiên n chính là tổng các ước nguyên tố của n.

Ví dụ: n=252=2.2.3.3.7 (n có 3 ước nguyên tố là 2, 3 và 7)

Số nguyên tố rút gọn của n là 2+3+7=12

Yêu cầu: a/ Nhập số tự nhiên n từ bàn phím, in ra số nguyên tố rút gọn của n. (1<n<1000000)

    b/ Nhập 2 số nguyên a, b không vượt quá 10000 (a<b). In ra các số có cùng số nguyên tố rút gọn với n trong đoạn a đến b và số lượng các số tìm được.

 

 

Ví dụ:

Nhap n: 252

          So nguyen to rut gon  cua n: 12

          Nhap a, b: 1  200

          Cac so co cung so nguyen to rut gon voi n:

          35  42  84  126  168   175

          Co 6 so

 

 

 

Bài tập 2: Cho trước tập tin văn bản INPUT.INP gồm nhiều dòng (không quá 1000 dòng), mỗi dòng chứa một chuỗi ký tự (gồm các chữ cái từ ‘A’ đến ‘Z’ viết dính liền với nhau), mỗi chuỗi dài không quá 255 ký tự. Trong tập tin này có duy nhất một chuỗi xuất hiện đúng một lần, các chuỗi còn lại đều xuất hiện đúng k lần. (Số k không cho trước, nhưng biết rằng k là một số chẵn và k≠0).

 

Yêu cầu:  Viết chương trình đọc tập tin INPUT.INP xử lý và tìm chuỗi duy nhất đó, ghi kết quả tìm được vào tập tin văn bản OUTPUT.OUT.

Kết quả:  Tập tin OUTPUT.OUT có một dòng là chuỗi ký tự tìm được theo yêu cầu.

Ví dụ:

 

 

     INPUT.INP                                                   OUTPUT.OUT                                                                                                                                                                

   ABCD

   EFGHIJK                                                                                                                                             TINHOCTRE                                                TINHOCTRE

   ABCD

  EFGHIJK

 

Bài tập 3

 

Cho xâu kí tự S bao gồm toàn các ký tự ‘a’ và ‘b’, không quá 255 ký tự. Dãy con đúng của dãy S là một dãy con liên tục bất kì của S  bao gồm các ký tự giống nhau. Dãy con đúng bậc 1 của dãy S là một dãy con liên tục bất kỳ của dãy S bao gồm các ký tự giống nhau nhưng được thêm 1 ký tự khác (ví dụ ‘aaaabaaa’, baaaa, aaaab). Trường hợp đặc biệt, dãy S chỉ có 1 loại ký tự thì dãy con đúng cũng chính là dãy con đúng bậc 1.

 

Yêu cầu:  a/ Hãy tính độ dài lớn nhất dãy con đúng của dãy S.

                  b/ Hãy tính độ dài lớn nhất dãy con đúng bậc 1 của dãy S.

Ví dụ: ‘aaabaaabbaaaaa’

Độ dài lớn nhất của dãy con đúng: 5           (‘aaabaaabbaaaaa’)

Độ dài lớn nhất của dãy con đúng bậc 1: 7     (‘aaabaaabbaaaaa’)

 

 

--------------------------------------------------------------------

 

- Các bài tập sẽ được cập nhật thường xuyên!

- Không spam trong TOPIC này, tuân thủ qui tắc 4room!

 

Cuối cùng: Mong các bạn ủng hộ, xin hết! 

 


Bài viết đã được chỉnh sửa nội dung bởi PlanBbyFESN: 10-04-2016 - 13:53

:huh:


#2
Element hero Neos

Element hero Neos

    Trung úy

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

 

 

Bài tập 1: Số nguyên tố rút gọn của một số tự nhiên n chính là tổng các ước nguyên tố của n.

Ví dụ: n=252=2.2.3.3.7 (n có 3 ước nguyên tố là 2, 3 và 7)

Số nguyên tố rút gọn của n là 2+3+7=12

Yêu cầu: a/ Nhập số tự nhiên n từ bàn phím, in ra số nguyên tố rút gọn của n. (1<n<1000000)

    b/ Nhập 2 số nguyên a, b không vượt quá 10000 (a<b). In ra các số có cùng số nguyên tố rút gọn với n trong đoạn a đến b và số lượng các số tìm được.

 

 

Ví dụ:

Nhap n: 252

          So nguyen to rut gon  cua n: 12

          Nhap a, b: 1  200

          Cac so co cung so nguyen to rut gon voi n:

          35  42  84  126  168   175

          Co 6 so

 

 

 

 

 

 

--------------------------------------------------------------------

 

- Các bài tập sẽ được cập nhật thường xuyên!

- Không spam trong TOPIC này, tuân thủ qui tắc 4room!

 

Cuối cùng: Mong các bạn ủng hộ, xin hết! 

 

 

function sum(n:integer):integer;
 var i,s:integer;
 begin
  i:=2;
  s:=0;
  while n>1 do
   begin
    if n mod i=0 then inc(s,i);
    while n mod i=0 do n:=n div i;
    inc(i);
   end;
  sum:=s;
 end;
var n,a,b,i,d:integer;
begin
 write('N=');readln(n);
 writeln('So nguyen to rut gon cua N: ',sum(n));
 write('A=');readln(a);
 write('B=');readln(b);
 write('Cac so co cung so nguyen to rut gon voi N: ');
 for i:=a to b do
  if sum(n)=sum(i) then
   begin
    write(i,' ');
    inc(d);
   end;
 writeln;

 writeln('Co ',d,' so');
 readln;
end.

 

--------------------------------------------------------------------------

 

 

Làm bừa không biết đúng hay sai :lol:



#3
Mystic

Mystic

    Thượng sĩ

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


Bài tập 3


 

Cho xâu kí tự S bao gồm toàn các ký tự ‘a’ và ‘b’, không quá 255 ký tự. Dãy con đúng của dãy S là một dãy con liên tục bất kì của S  bao gồm các ký tự giống nhau. Dãy con đúng bậc 1 của dãy S là một dãy con liên tục bất kỳ của dãy S bao gồm các ký tự giống nhau nhưng được thêm 1 ký tự khác (ví dụ ‘aaaabaaa’, baaaa, aaaab). Trường hợp đặc biệt, dãy S chỉ có 1 loại ký tự thì dãy con đúng cũng chính là dãy con đúng bậc 1.

 

Yêu cầu:  a/ Hãy tính độ dài lớn nhất dãy con đúng của dãy S.

                  b/ Hãy tính độ dài lớn nhất dãy con đúng bậc 1 của dãy S.

Ví dụ: ‘aaabaaabbaaaaa’

Độ dài lớn nhất của dãy con đúng: 5           (‘aaabaaabbaaaaa’)

Độ dài lớn nhất của dãy con đúng bậc 1: 7     (‘aaabaaabbaaaaa’)

 

 

program ft;
uses crt;
var x,i,n,j,k,l,t,p,tg:integer;
a,b,c:array[1..1000] of integer;
s,s1,s2,z:string;
m,r:char;
function kt(s1:string):boolean;
var ktt:boolean;
i,j,k,l:integer;
m,n:char;
begin
ktt:=false;
k:=0;l:=0;
m:='a';
n:='b';
for i:=1 to length(s1) do
if s1[i]=m then k:=k+1 else l:=l+1;
if (k=length(s1))or(l=length(s)) then ktt:=true;
kt:=ktt;
end;
function kopo(s1:string):integer;
var i,j,k,l:integer;
m,z:char;
begin
k:=0;l:=0;
m:='a';
z:='b';
for i:=1 to length(s1) do
if s1[i]=m then k:=k+1;
for i:=1 to length(s1) do
if s1[i]=z then l:=l+1;
if k>=l then kopo:=k else kopo:=l;
end;
begin
clrscr;
write('Nhap xau:');readln(s);
m:='a';
r:='b';
j:=0;
k:=1;
repeat
t:=0;
for i:=k to length(s) do
if s[i]=m then t:=t+1 else break;
j:=j+1;
a[j]:=t;
k:=k+1;
until k>length(s);
k:=1;
repeat
t:=0;
for i:=k to length(s) do
if s[i]=r then t:=t+1 else break;
j:=j+1;
a[j]:=t;
k:=k+1;
until k>length(s);
for i:=1 to j-1 do
for k:=i+1 to j do
if a[i]<a[k] then
begin
tg:=a[i];
a[i]:=a[k];
a[k]:=tg;
end;
if kt(s) then writeln('Do dai lon nhat cua day con dung:',length(s)) else
writeln('Do dai lon nhat cua day con dung:',a[1]);
k:=1;
j:=0;
repeat
z:='';
for i:=k to length(s) do
    z:=z+s[i];
if kopo(z)=length(z)-1 then
   begin
   j:=j+1;
   c[j]:=length(z);
   end;
k:=k+1;
until k>length(s);
k:=length(s);
repeat
z:='';
for i:=k downto 1 do
    z:=z+s[i];
if kopo(z)=length(z)-1 then
   begin
   j:=j+1;
   c[j]:=length(z);
   end;
k:=k-1;
until k>length(s);
for i:=1 to j-1 do
for l:=i+1 to j do
if c[i]<c[l] then
begin
tg:=c[i];
c[i]:=c[l];
c[l]:=tg;
end;
if kt(s) then writeln('Do dai lon nhat cua day con dung bac 1:',length(s)) else
writeln('Do dai lon nhat cua day con dung bac 1:',c[1]);
readln
end.
P/s:Mình đã test thử và thấy đúng ,tuy nhiên ct hơi dài.Vì vậy mình khuyến khích bạn nào có cách giải ngằn ngọn hơn :))
Ở đây mình mới dùng kiểu dữ liệu còn nhẹ,chưa phù hợp lắm (tính cho nhanh),để chặt chẽ hơn thì các bạn có thể sử dụng kiểu dữ liệu khác lớn hơn để ct thêm chặt chẽ !

Bài viết đã được chỉnh sửa nội dung bởi Mystic: 15-04-2016 - 20:08

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#4
Mystic

Mystic

    Thượng sĩ

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


 

 

Bài tập 1: Số nguyên tố rút gọn của một số tự nhiên n chính là tổng các ước nguyên tố của n.

Ví dụ: n=252=2.2.3.3.7 (n có 3 ước nguyên tố là 2, 3 và 7)

Số nguyên tố rút gọn của n là 2+3+7=12

Yêu cầu: a/ Nhập số tự nhiên n từ bàn phím, in ra số nguyên tố rút gọn của n. (1<n<1000000)

    b/ Nhập 2 số nguyên a, b không vượt quá 10000 (a<b). In ra các số có cùng số nguyên tố rút gọn với n trong đoạn a đến b và số lượng các số tìm được.

 

 

Ví dụ:

Nhap n: 252

          So nguyen to rut gon  cua n: 12

          Nhap a, b: 1  200

          Cac so co cung so nguyen to rut gon voi n:

          35  42  84  126  168   175

          Co 6 so

 

program b2;
uses crt;
var i,n,j,k,l,p,t,a,b,x:longint;
c,d:array[1..1000] of longint;
function ktm(n:longint):longint;
var i,j,l,k,t:longint;
c:array[1..1000] of longint;
begin
i:=2;l:=0;
repeat
while n mod i<>0 do
i:=i+1;
l:=l+1;
c[l]:=i;
n:=n div i;
until n=1;
for i:=1 to l-1 do
begin
j:=i+1;
while j<=l do
if c[i]=c[j] then
   begin
   for k:=j to l do
   c[k]:=c[k+1];
   l:=l-1;
   end else j:=j+1;
end;
t:=0;
for i:=1 to l do
t:=t+c[i];
ktm:=t;
end;
begin
clrscr;
{cau a}
repeat
write('Nhap n:');readln(n);
if (1<n)and(n<1000000) then break;
writeln('Nhap 1<n<1000000');
until false;
x:=ktm(n);
writeln('So nguyen to rut gon cua ',n,' la:',x);
{cau b}
repeat
write('Nhap a:');readln(a);
if a<=10000 then break;
writeln('Nhap a<=10000');
until false;
repeat
write('Nhap b:');readln(b);
if b>a then break;
writeln('Nhap b<a');
until false;
for i:=a to b do
if (ktm(i)=ktm(n)) then
   begin
   k:=k+1;
   write(i,'   ');
   if k mod 20=0 then writeln;
   end;
writeln;
writeln('Co ',k,' so');
readln
end.
P/s:Đã test và đúng !
Kiểu dữ liệu các bạn có thể đổi .Máy mình cấu hình thấp nên ko chạy được các số quá lớn :(

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#5
Mystic

Mystic

    Thượng sĩ

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


Bài tập 2: Cho trước tập tin văn bản INPUT.INP gồm nhiều dòng (không quá 1000 dòng), mỗi dòng chứa một chuỗi ký tự (gồm các chữ cái từ ‘A’ đến ‘Z’ viết dính liền với nhau), mỗi chuỗi dài không quá 255 ký tự. Trong tập tin này có duy nhất một chuỗi xuất hiện đúng một lần, các chuỗi còn lại đều xuất hiện đúng k lần. (Số k không cho trước, nhưng biết rằng k là một số chẵn và k≠0).


 

Yêu cầu:  Viết chương trình đọc tập tin INPUT.INP xử lý và tìm chuỗi duy nhất đó, ghi kết quả tìm được vào tập tin văn bản OUTPUT.OUT.

Kết quả:  Tập tin OUTPUT.OUT có một dòng là chuỗi ký tự tìm được theo yêu cầu.

Ví dụ:

 

 

     INPUT.INP                                                   OUTPUT.OUT                                                                                                                                                                

   ABCD

   EFGHIJK                                                                                                                                             TINHOCTRE                                                TINHOCTRE

   ABCD

  EFGHIJK

 

program bka;
uses crt;
var i,n,j,k,l,p:integer;
f:text;
d:array[1..1000] of integer;
a:array[1..100] of string;
s,tg:string;
begin
clrscr;
assign(f,'d:\input.inp');
reset(f);
n:=0;
while not eof(f) do
      begin
      readln(f,s);
      n:=n+1;
      a[n]:=s;
      end;
close(f);
assign(f,'d:\output.out');
rewrite(f);
for i:=1 to n do
d[i]:=1;
for i:=1 to n-1 do
begin
j:=i+1;
while j<=n do
if a[i]=a[j] then
   begin
   for k:=j to n do
   a[k]:=a[k+1];
   n:=n-1;
   d[i]:=d[i]+1;
   end else j:=j+1;
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if d[i]>d[j] then
begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
write(f,a[1]);
close(f);
readln
end.
P/s:Ở bài này thì bạn phải lập 1 ct mới phải mang tên là d:\input.inp (ko viết gì trong đó cả và lưu lại)
và chuyển sang Notepad,sau đó nhập dữ liệu vào,rồi chạy ct thì trong ổ đĩa D sẽ hiệp ra 1 tệp mới mang tên output.out
và bạn chuyển tệp đó sang dạng Notepad thì sẽ có kết quả !

Bài viết đã được chỉnh sửa nội dung bởi Mystic: 11-04-2016 - 12:07

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#6
PlanBbyFESN

PlanBbyFESN

    Thiếu úy

  • Điều hành viên OLYMPIC
  • 637 Bài viết

 

 

Bài nào cũng dài thật! Bạn rút gọn thuật toán để mình hiểu bài đã được không, nếu được giải thích thuật toán luôn, còn test để sau!


:huh:


#7
Mystic

Mystic

    Thượng sĩ

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

Bài nào cũng dài thật! Bạn rút gọn thuật toán để mình hiểu bài đã được không, nếu được giải thích thuật toán luôn, còn test để sau!

Được thôi !

B1:

- Ý tưởng làm bài :

Làm 1 hàm kiểm tra,trong đó:

Phân tích n ra thừa số ngto,cho các thừa số đó vào mảng ->xóa trùng ->tổng các số còn lại trong mảng là số nguyên tố rút gọn của n !

Về ct chính:

Câu a:Chỉ cần áp dụng hàm rồi tính thôi .

Câu b:Cho i:=a to b ,nếu số nguyên tố  rút gọn của i= số nguyên tố  rút gọn của n thì viết ra

(tuy nhiên trong bài mình có dùng ít câu lệnh để làm cho màn hình kq thêm đẹp )

B2:

Cách nhập dữ liệu thì mình đã hướng dẫn ở trên .

Còn hướng làm thì:

-Nhập lần lượt các chuỗi vào mảng ->Đếm số lần xuất hiện của từng chuỗi và xóa chuỗi đó luôn để khỏi phải xét lại dẫn đến sai

->Sắp xếp lại mảng theo thứ tự tăng về số lần xh (đổi chỗ của chuỗi ) ->Chuỗi cần tìm là chuỗi đầu tiên(a[1])

B3:

Hàm:

-Dùng 1 hàm kt xem xâu có cùng 1 ký tự hay ko 

-Dùng 1 hàm kt xem có bn ký tự 'a' và bn ký tự 'b' trong xâu (để tí nữa mình kiểm tra coi trong xâu có phải chỉ có 1 ký tự khác loài hay ko.

Ct chính:

*Câu a:

-Dùng 1 vòng repeat để kt độ dài lớn nhất của các ký tự 'a' liên tiếp trong xâu

-Dùng 1 vòng repeat để kt độ dài lớn nhất của các ký tự 'b' liên tiếp trong xâu

Sau đó lưu vào mảng ->Sx giảm dần.

Nếu trong xâu toàn ký tự giống nhau thì viết length(s) ra ngược lại

 thì viết a[1] ra (a[1] chính là độ dài của dãy con dài nhất thỏa ĐK)

*Câu b:

-Kiểm  tra 2 lần:

Lần 1:kt xuôi

+bớt từ từ các ký tự từ trước đến sau (vd: 1 2 3 4 5 ->2 3 4 5-> 3 4 5-> 4 5-> 5)đồng thời cộng các ký tự còn lại

ta đc xâu mới.

+Nếu trong xâu mới có 1 ký tự lạc loài hay số ký tự trùng nhau của xâu mới =số ký tự của xâu mới -1 thì ta cho length của xâu mới vào 1 mảng khác (mảng c)

Lần 2:kt ngược

+Cũng tương tự như vậy nhưng xét ngược xâu thôi (vd:1 2 3 4 5->5 4 3 2 1-> 4 3 2 1 -> 3 2 1 ->....

=> Sắp xếp lại mảng theo thư tự giảm dần .

Nếu trong xâu toàn ký tự giống nhau thì viết length(s) ra ngược lại thì viết 

Độ dài của dãy con bậc 1=c[1].

Nói ra dài dòng vs khó hiểu lắm ! Nêu các bạn thông cảm :))


Bài viết đã được chỉnh sửa nội dung bởi Mystic: 10-04-2016 - 17:58

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#8
PlanBbyFESN

PlanBbyFESN

    Thiếu úy

  • Điều hành viên OLYMPIC
  • 637 Bài viết

Tiếp tục TOPIC :

 

Bài 4: Viết chương trình in ra các số nguyên từ 1 đến 100 sao cho cứ 10 số thì xuống dòng.

 

Bài 5: Viết chương trình in ra màn hình bảng cửu chương.

 

Bài 6: Viết chương trình phân tích 1 số ra thừa số nguyên tố.

Ví dụ: N=100 sẽ in ra màn hình:

100 / 2

50  /  2

25  /  5

5   /   5

1   /

 

Bài 7: Nhập dãy số thực a. Tìm các số của dãy bằng tổng 2 số khác trong dãy.

Ví dụ: 

           4

          6 9 4 2

=>   6 = 4+2

 

Bài 8: Nhập dãy số thực a và số k. Xét xem trong dãy có k số dương đứng cạnh nhau hay không?

Ví dụ:  -1 2 3 4 -2 -4 4 5 -3 4 5 6

            3

=>        Có

 

Bài 9: Cho hai mảng số nguyên: Mảng A có m phần từ, mảng B có n phần tử.

a/ Sắp xếp các mảng đó theo thứ tự giảm dần.

b/ Trộn 2 mảng đó vào mảng C sao cho mảng C vẫn có thứ tự giảm dần (Không được sắp xếp lại mảng C)


Bài viết đã được chỉnh sửa nội dung bởi PlanBbyFESN: 11-04-2016 - 20:59

:huh:


#9
Mystic

Mystic

    Thượng sĩ

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


Tiếp tục TOPIC :

 

Bài 4: Viết chương trình in ra các số nguyên từ 1 đến 100 sao cho cứ 10 số thì xuống dòng.

 

Bài 5: Viết chương trình in ra màn hình bảng cửu chương.

 

Bài 6: Viết chương trình phân tích 1 số ra thừa số nguyên tố.

Ví dụ: N=100 sẽ in ra màn hình:

100 / 2

50  /  2

25  /  5

5   /   5

1   /

 

Bài 7: Nhập dãy số thực a. Tìm các số của dãy bằng tổng 2 số khác trong dãy.

Ví dụ: 

           4

          6 9 4 2

=>   6 = 4+2

 

Bài 8: Nhập dãy số thực a và số k. Xét xem trong dãy có k số dương đứng cạnh nhau hay không?

Ví dụ:  -1 2 3 4 -2 -4 4 5 -3 4 5 6

            3

=>        Có

 

Bài 9: Cho hai mảng số nguyên: Mảng A có m phần từ, mảng B có n phần tử.

a/ Sắp xếp các mảng đó theo thứ tự tăng dần.

b/ Trộn 2 mảng đó vào mảng C sao cho mảng C vẫn có thứ tự giảm dần (Không được sắp xếp lại mảng C)

*Bài 4:

 

program b4;
uses crt;
var i,n,k:integer;
begin
clrscr;
k:=0;
for i:=1 to 100 do
    begin
    write(i,'   ');
    k:=k+1;
    if k mod 10=0 then writeln;
    end;
readln
end.
*Bài 5:

program b5;
uses crt;
var i,j:byte ;
begin
clrscr ;
writeln(' Bang cuu chuong : ') ; Writeln ;
For i:=1 to 10 do
For j:=2 to 9 do Write(j:4,'x',i:2,'=',i*j:2) ;
readln;
end.
*Bài 6:

program b6;
uses crt;
var i,n:longint;
begin
clrscr;
write('Nhap n:');readln(n);
i:=2;
repeat
while n mod i<>0 do
      i:=i+1;
      write(i);
      n:=n div i;
      if n<>1 then write('*');
until n=1;
readln
end.
*Bài 7:

program b7;
uses crt;
var i,n,j,k,l,m:byte;
a,b,c:array[1..1000] of real;
begin
clrscr;
write('Nhap so pt:');readln(n);
for i:=1 to n do
    begin
    write('a[',i,']=');readln(a[i]);
    end;
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
if (j<>k)and(j<>i)and(k<>i)and(a[i]=a[j]+a[k]) then
writeln(a[i]:1:0,'=',a[j]:1:0,'+',a[k]:1:0);
readln
end.
*Bài 8:

program b8;
uses crt;
var i,n,j,k,l,p:byte;
a:array[1..1000] of real;
kt:boolean;
begin
clrscr;
write('Nhap so pt:');readln(n);
kt:=false;
for i:=1 to n do
    begin
    write('a[',i,']=');readln(a[i]);
    end;
writeln;
write('Nhap k:');readln(k);
l:=0;
for i:=1 to n do
begin
p:=0;
for j:=i to i+k-1 do
if a[j]>0 then p:=p+1;
if p=k then kt:=true;
end;
if kt=true then writeln('Co') else writeln('Khong');
readln
end.
*Bài 9:

program b9;
uses crt;
var i,n,j,k,l,tg,m,p:longint;
a,b,c:array[1..1000] of longint;
begin
clrscr;
write('Nhap so pt mang a:');readln(n);
for i:=1 to n do
    begin
    write('a[',i,']=');readln(a[i]);
    end;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
   begin
   tg:=a[i];
   a[i]:=a[j];
   a[j]:=tg;
   end;
writeln;
write('Nhap so pt mang b:');readln(m);
for i:=1 to m do
    begin
    write('b[',i,']=');readln(b[i]);
    end;
for i:=1 to m-1 do
for j:=i+1 to m do
if b[i]>b[j] then
   begin
   tg:=b[i];
   b[i]:=b[j];
   b[j]:=tg;
   end;
writeln;
writeln('Mang a sau khi sx tang dan:');
for i:=1 to n do
write(a[i],'   ');
writeln;
writeln('Mang b sau khi sx tang dan:');
for i:=1 to m do
write(b[i],'   ');
writeln;
i:=n;
p:=0;
j:=m;
repeat
         if a[i]>=b[j] then
            begin
            p:=p+1;
            c[p]:=a[i];
            i:=i-1;
            end else
                begin
                p:=p+1;
                c[p]:=b[j];
                j:=j-1;
                end;
until (i<1)or(j<1);
for k:=i downto 1 do
      begin
      p:=p+1;
      c[p]:=a[i];
      end;
for l:=j downto 1 do
      begin
         p:=p+1;
         c[p]:=b[j];
         end;
writeln('Mang c sau khi sx giam dan:');
for i:=1 to p do
write(c[i],'  ');
readln
end.
P/s:Đã test hết và đúng chỉ riêng bài 7 là kq hơi khác 1 chút nhưng ko mất tính tổng quát !
Bài 9 đề đúng là "Trộn 2 mảng đó vào mảng C sao cho mảng C vẫn có thứ tự tăng dần (Không được sắp xếp lại mảng C)" ,tuy nhiên bác PlanBby FEST đã sửa để nó khác hơn :D
Bài 9 có 2 cách:
C1:Sx 2 mảng a,b giảm dần rồi xét trực tiếp vào luôn !
C2:Ko cần sx 2 mảng giảm dần mà xét đảo ngược 2 mảng đó thì kq vẫn đúng ! (Ở đây mình làm  C2 cho đỡ dài :)))

Bài viết đã được chỉnh sửa nội dung bởi Mystic: 11-04-2016 - 20:50

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#10
PlanBbyFESN

PlanBbyFESN

    Thiếu úy

  • Điều hành viên OLYMPIC
  • 637 Bài viết

 

 

Đã sửa lại đề!

 

Cứ tìm thuật toán tối ưu đi và test kết quả phải đúng!


:huh:


#11
Mystic

Mystic

    Thượng sĩ

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

Đã sửa lại đề!

 

Cứ tìm thuật toán tối ưu đi và test kết quả phải đúng!

Sửa đề nào vậy bạn .Mà bạn muốn tt tối ưu của bài nào ?


>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#12
Mystic

Mystic

    Thượng sĩ

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


Bài 9: Cho hai mảng số nguyên: Mảng A có m phần từ, mảng B có n phần tử.

a/ Sắp xếp các mảng đó theo thứ tự giảm dần.

b/ Trộn 2 mảng đó vào mảng C sao cho mảng C vẫn có thứ tự giảm dần (Không được sắp xếp lại mảng C)

 

program b9;
uses crt;
var i,n,j,k,l,tg,m,p:longint;
a,b,c:array[1..1000] of longint;
begin
clrscr;
write('Nhap so pt mang a:');readln(n);
for i:=1 to n do
    begin
    write('a[',i,']=');readln(a[i]);
    end;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]<a[j] then
   begin
   tg:=a[i];
   a[i]:=a[j];
   a[j]:=tg;
   end;
writeln;
write('Nhap so pt mang b:');readln(m);
for i:=1 to m do
    begin
    write('b[',i,']=');readln(b[i]);
    end;
for i:=1 to m-1 do
for j:=i+1 to m do
if b[i]<b[j] then
   begin
   tg:=b[i];
   b[i]:=b[j];
   b[j]:=tg;
   end;
writeln;
writeln('Mang a sau khi sx giam dan:');
for i:=1 to n do
write(a[i],'   ');
writeln;
writeln('Mang b sau khi sx giam dan:');
for i:=1 to m do
write(b[i],'   ');
writeln;
i:=1;
p:=0;
j:=1;
repeat
         if a[i]>=b[j] then
            begin
            p:=p+1;
            c[p]:=a[i];
            i:=i+1;
            end else
                begin
                p:=p+1;
                c[p]:=b[j];
                j:=j+1;
                end;
until (i>n)or(j>m);
for k:=i to n  do
      begin
      p:=p+1;
      c[p]:=a[i];
      end;
for l:=j to m do
      begin
         p:=p+1;
         c[p]:=b[j];
         end;
writeln('Mang c sau khi sx giam dan:');
for i:=1 to p do
write(c[i],'  ');
readln
end.

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#13
Mystic

Mystic

    Thượng sĩ

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


Bài 7: Nhập dãy số thực a. Tìm các số của dãy bằng tổng 2 số khác trong dãy.

Ví dụ: 

           4

          6 9 4 2

=>   6 = 4+2

 

Thuật toán tối ưu :

 

program b7;
uses crt;
var i,n,j,k,l,m:byte;
x,y:real;
a,b,c:array[1..1000] of real;
begin
clrscr;
write('Nhap so pt:');readln(n);
for i:=1 to n do
    begin
    write('a[',i,']=');readln(a[i]);
    end;
 
for i:=1 to n do
for j:=1 to n do
begin
m:=0;
for k:=1 to n do
begin
if (j<>k)and(j<>i)and(k<>i)and(a[i]=a[j]+a[k]) then
   begin
   m:=m+1;
   writeln(a[i]:1:0,'=',a[j]:1:0,'+',a[k]:1:0);
   end;
if m=1 then break;
end;
if m=1 then break;
end;
readln
end.

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#14
Nobel

Nobel

    Hạ sĩ

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

 

Bài 9: Cho hai mảng số nguyên: Mảng A có m phần từ, mảng B có n phần tử.

a/ Sắp xếp các mảng đó theo thứ tự giảm dần.

b/ Trộn 2 mảng đó vào mảng C sao cho mảng C vẫn có thứ tự giảm dần (Không được sắp xếp lại mảng C)

Bài 9 mình thấy có đề còn y/c nhập số đôi 1 khác nhau  nữa cơ !

Các bạn có thể cho mình ct đc ko ?


" Im lặng là câu trả lời tốt nhất mà bạn có thể dành cho kẻ ba hoa " !

 




 

 


#15
Mystic

Mystic

    Thượng sĩ

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


Bài 9 mình thấy có đề còn y/c nhập số đôi 1 khác nhau  nữa cơ !

Các bạn có thể cho mình ct đc ko ?

Bài của bạn đây:

program doimot;
uses crt;
var i,n,j,k,p,l:longint;
a,b:array[1..1000] of longint;
begin
clrscr;
write('Nhap so pt:');readln(n);
write('a[',1,']=');readln(a[1]);
b[1]:=a[1];
k:=1;
i:=2;
repeat
      p:=0;
      write('a[',i,']=');readln(a[i]);
      k:=k+1;
      b[k]:=a[i];
      for l:=1 to k-1 do
     if a[i]<>b[l] then p:=p+1;
     if p=k-1 then i:=i+1 else writeln('Nhap lai');
until (a[i]<>b[l])and(i>n);
writeln('Mang:');
for i:=1 to n do
write(a[i]:4);
readln
end.

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#16
Mystic

Mystic

    Thượng sĩ

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


Tiếp tục TOPIC :

 

Bài 4: Viết chương trình in ra các số nguyên từ 1 đến 100 sao cho cứ 10 số thì xuống dòng.

 

Bài 5: Viết chương trình in ra màn hình bảng cửu chương.

 

Bài 6: Viết chương trình phân tích 1 số ra thừa số nguyên tố.

Ví dụ: N=100 sẽ in ra màn hình:

100 / 2

50  /  2

25  /  5

5   /   5

1   /

 

Bài 7: Nhập dãy số thực a. Tìm các số của dãy bằng tổng 2 số khác trong dãy.

Ví dụ: 

           4

          6 9 4 2

=>   6 = 4+2

 

Bài 8: Nhập dãy số thực a và số k. Xét xem trong dãy có k số dương đứng cạnh nhau hay không?

Ví dụ:  -1 2 3 4 -2 -4 4 5 -3 4 5 6

            3

=>        Có

 

Bài 9: Cho hai mảng số nguyên: Mảng A có m phần từ, mảng B có n phần tử.

a/ Sắp xếp các mảng đó theo thứ tự giảm dần.

b/ Trộn 2 mảng đó vào mảng C sao cho mảng C vẫn có thứ tự giảm dần (Không được sắp xếp lại mảng C)

*Thuật toán thì đai dòng ,chi bằng nói ý tưởng :

B4:

Cho chạy từ 1 ->100 :

+viết  các số ra, mối lần viết thì  cộng 1 vào biến k

+Khi nào k chia hết cho 10 thì xuống dòng(writeln)

B5:

Cho chạy 1 vòng for từ 1->10

lồng trong vòng for đó ,dùng tiếp 1 vòng for từ 1->9,rồi lấy gt của vòng for trong nhân vs gt của vòng for ngoài thì đc (Nhớ là các gt  cách nhau hợp lý )

B6:

dùng vòng repeat,trong đó:

+dùng thêm vòng while:nếu n ko chia hết cho i thì i:=i+1;

 +nếu n chia hết cho i thì viết i ra đồng thời n:=n div i (để xét phần nguyên còn lại của n).

+nếu  phần nguyên đó khác 1(tức là chưa phân tích xong) thì viết ra dấu nhân

+Nếu phần nguyên đó =1 thì kt vòng repeat.

B7:

Dùng 3 vòng for,trong đó:

+Vòng for i dùng để xét gt a[i] có = tổng của 2 gt còn lại trong dãy hay ko

+Vong for j dùng để xét gt thứ I

+Vòng for k dùng để xét gt thứ II

Nếu thứ tự của 3 gt khác nhau và a[i]=a[j]+a[k] thì viết ra đồng thời cộng 1 vào biến m (m dung để đếm số lần xh của gt a[j],a[k])

Nếu m=1(tức là a[j],a[k] xh 1 lần thì thoát ra khỏi vòng lặp tương ứng ).

=>Các số cần tìm đã được in ra trong quá trình xét.

B8:

Mình xét từng khoảng:

Vd:mảng a:1 2 3 4 5 và k=4

Thì xét lần lượt:1 2 3 4;2 3 4 5

Cho 1 vòng for chạy từ 1->n (xét các gt của mảng)(1)

Dùng tiếp 1 vòng for lồng trong vòng for (1)nhưng phải cho chạy từ i->i+k-1(bạn thay gt của i,k vào là tính ra đây là số thứ tự của các gt trong dãy )

trong vòng for lồng ,mình đếm có bn số nguyên dương

Nếu số các số nguyên dương =k thì đúng và dùng kiểu boolean để lưu cái bản chất"đúng" ấy

Sau đó nếu kt=true thì viết "Có" ngược lại thì viết "Khong"

B9:

-Sx giảm dần 2 mảng

-Dùng vòng repeat:

+Nếu gt đầu của mảng a>=gt đầu của mảng b thì tăng chỉ số của mảng c lên và gán gt đó của mảng a vào mảng c,tăng chỉ số của mản a lên.Ngược lại thì tăng chỉ số của mảng c lên và gán gt đó của mảng b vào mảng c,tăng chỉ số của mảng b lên.Kết thúc khi nào chỉ số của mảng a lớn hơn số pt của mảng a hoặc chỉ số của mảng b lớn hơn số pt của mảng b.

+Xét tiếp các pt còn lại của mảng a và cộng tiếp vào mảng c

+Xét tiếp các pt còn lại của mảng b và cộng tiếp vào mảng c

=>Ta đc mảng c có thứ tự giảm dần.


Bài viết đã được chỉnh sửa nội dung bởi Mystic: 12-04-2016 - 17:51

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#17
Mystic

Mystic

    Thượng sĩ

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

Xin biếu 1 bài:

 

Câu 10: (7.0 điểm) Cho một chuỗi gồm n2 ký tự. Người ta cắt chuỗi từ trái sang phải thành n chuỗi con, mỗi chuỗi con có đúng n ký tự. Viết mỗi chuỗi con thành một cột, ta có một bảng gồm n hàng và n cột ký tự.

Yêu cầu: Viết chương trình nhập vào một chuỗi gồm n2ký tự (4 £  n2£ 255).

a) In ra màn hình các hàng có tổng mã ASCII của các ký tự là lớn nhất.

b) In giá trị tổng ở câu a ra màn hình.

Ví dụ:

Nhập chuỗi

abcdefghi

-------------

Bảng sắp xếp:

a d g

b e h

c f  i

------

Kết quả

a) c f  i

b) 306


Bài viết đã được chỉnh sửa nội dung bởi Mystic: 12-04-2016 - 18:05

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#18
Nobel

Nobel

    Hạ sĩ

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

Bài 11: (7 điểm) TỔNG CÁC SỐ FIBONACI

         Dãy Fibonaci là dãy gồm các số: 1, 1, 2, 3, 5, 8, .... được xác định bởi công thức sau:

                        F1=1, F2=1, Fi=Fi-1+Fi-2 với i>2.

         Em hãy biểu diễn một số tự nhiên N thành tổng của ít nhất các số Fibonaci khác nhau.

         Dữ liệu vào: cho file FIBO.INP chứa số N (N ≤ 2000000000)         

Dữ liệu ra: ghi ra file FIBO.OUT biểu diễn số N thành tổng của ít nhất các số Fibonaci khác nhau.

Ví dụ: 

           FIBO.INP

           129

           FIBO.OUT

           129 = 89 + 34 + 5 + 1

Hoặc
              FIBO.INP
           8
            FIBO.OUT
            8=8

Bài viết đã được chỉnh sửa nội dung bởi Nobel: 12-04-2016 - 18:32

" Im lặng là câu trả lời tốt nhất mà bạn có thể dành cho kẻ ba hoa " !

 




 

 


#19
vanlong12

vanlong12

    Binh nhất

  • Thành viên mới
  • 34 Bài viết

 

Bài 11: (7 điểm) TỔNG CÁC SỐ FIBONACI

         Dãy Fibonaci là dãy gồm các số: 1, 1, 2, 3, 5, 8, .... được xác định bởi công thức sau:

                        F1=1, F2=1, Fi=Fi-1+Fi-2 với i>2.

         Em hãy biểu diễn một số tự nhiên N thành tổng của ít nhất các số Fibonaci khác nhau.

         Dữ liệu vào: cho file FIBO.INP chứa số N (N ≤ 2000000000)         

Dữ liệu ra: ghi ra file FIBO.OUT biểu diễn số N thành tổng của ít nhất các số Fibonaci khác nhau.

Ví dụ: 

           FIBO.INP

           129

           FIBO.OUT

           129 = 89 + 34 + 5 + 1

Hoặc
              FIBO.INP
           8
            FIBO.OUT
            8=8

 

dể đấy cho mk,,,bạn cứ lam thế này

 

 

 

uses crt;
var
f:text;
 a,b,c:array[1..100]of integer;
i,j,k,l,n,s:integer;
function fi(x:integer):boolean;
var f,f1,f2,i:integer; kt:boolean;
begin
clrscr;
     f:=0;
     f1:=1;
     kt:=false;
     for i:=1 to x do
     begin
     f2:=f1+f;
     f:=f1;
     f1:=f2;
     if f2=x then kt:=true;
     end;
     fi:=kt;
end;
begin
assign(f,'d:\fi.inp');
reset(f);
while not eof(f) do
read(f,n);
close(f);
assign(f,'d:\fi.out');
rewrite(f);
for i:=n downto 1 do
if  fi(i) then
begin
l:=l+1;
a[l]:=i;
end;
s:=0;
write(f,n,'=');
for j:=1 to l do
begin
s:=s+a[j];
if s>n then s:=s-a[j]
else
begin
if s=n  then
begin
write(f,a[j]);
break;
end;
if s<n then
begin
write(f,a[j]);
write(f,'+');
end;
end;
end;
close(f);
readln
end.

_ _ _ nỗi bất hạnh làm ra con người_ _ _

  + _còn con người làm ra hạnh phúc_ +


#20
vanlong12

vanlong12

    Binh nhất

  • Thành viên mới
  • 34 Bài viết

Xin biếu 1 bài:

 

Câu 10: (7.0 điểm) Cho một chuỗi gồm n2 ký tự. Người ta cắt chuỗi từ trái sang phải thành n chuỗi con, mỗi chuỗi con có đúng n ký tự. Viết mỗi chuỗi con thành một cột, ta có một bảng gồm n hàng và n cột ký tự.

Yêu cầu: Viết chương trình nhập vào một chuỗi gồm n2ký tự (4 £  n2£ 255).

a) In ra màn hình các hàng có tổng mã ASCII của các ký tự là lớn nhất.

b) In giá trị tổng ở câu a ra màn hình.

Ví dụ:

Nhập chuỗi

abcdefghi

-------------

Bảng sắp xếp:

a d g

b e h

c f  i

------

Kết quả

a) c f  i

b) 306

cái vi du,,hinh như g,h,i moi la hang có tong lon nhat chứ


_ _ _ nỗi bất hạnh làm ra con người_ _ _

  + _còn con người làm ra hạnh phúc_ +





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

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