Đế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

#21
Mystic

Mystic

    Thượng sĩ

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

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

Không phải vậy !

Vd:Xâu:  abcdefghi

thì mình chuyển a,b,c theo hàng dọc ,d,e,f theo hàng dọc,g,h,i theo hàng dọc 

=> 

a d g

b e h

c f  i


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

>>> 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


#22
vanlong12

vanlong12

    Binh nhất

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

thì thế ,

 

Không phải vậy !

Vd:Xâu:  abcdefghi

thì mình chuyển a,b,c theo hàng dọc ,d,e,f theo hàng dọc,g,h,i theo hàng dọc 

=> 

a d g

b e h

c f  i

,,thì thế mới nói hàng doc g,h,i  ,,có tổng lớn nhất 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_ +


#23
Mystic

Mystic

    Thượng sĩ

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

thì thế ,

 

,,thì thế mới nói hàng doc g,h,i  ,,có tổng lớn nhất chứ

Không phải vậy ,sau khi sắp xếp thành như vậy thì ta tính theo hang ngang (Nên nhớ "xếp dọc,tính ngang")


>>> 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


#24
Mystic

Mystic

    Thượng sĩ

  • Thành viên
  • 240 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

 

Đây là cách của mình :

 

program jjk;
uses crt;
var i,n,j,s,z,d,k:longint;
var a,b:array[1..1000] of longint;
function fibo(n:longint):boolean;
var i,x1,x2,x:longint;
kt:boolean;
begin
kt:=false;
x1:=0;
x2:=1;
for i:=1 to n do
begin
x:=x1+x2;
x1:=x2;
x2:=x;
if x=n then kt:=true;
end;
fibo:=kt;
end;
begin
clrscr;
d:=0;
z:=0;
j:=0;
repeat
write('Nhap n la:');readln(n);
if n<=2000000000 then break;
writeln('Nhap lai');
until false;
for i:=1 to n do
if fibo(i) then begin
        d:=d+1;
        a[d]:=i;
        end;
z:=n;
for k:=d downto 1 do
begin
if a[k]<=z then
begin
j:=j+1;
b[j]:=a[k];
z:=z-a[k];
end;
end;
write(n,'=');
for i:=1 to j do
begin
write(b[i]);
if i<j then write('+');
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


#25
vanlong12

vanlong12

    Binh nhất

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

bài

 

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 này theo tau nên dung ma trân vuông,,,

sau đó sap xếp theo thứ tự nhu trên 

rui lấy số thứ tự trong bảng mã ascii

cộng lai ,,rùi so sanh với cái ban đầu,,nếu thây lon hơn, thì gán cái ban

đầu bang nó,,,là tim ra đươc,,

nhung còn 1 chỗ tau k hiu sao mà,,,lấy ord(a[i,j]),,nó lai k dược,,,k bít là vấn đề nó nằm chỗ

nào nữa


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

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


#26
Mystic

Mystic

    Thượng sĩ

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

bài

 

 bài này theo tau nên dung ma trân vuông,,,

sau đó sap xếp theo thứ tự nhu trên 

rui lấy số thứ tự trong bảng mã ascii

cộng lai ,,rùi so sanh với cái ban đầu,,nếu thây lon hơn, thì gán cái ban

đầu bang nó,,,là tim ra đươc,,

nhung còn 1 chỗ tau k hiu sao mà,,,lấy ord(a[i,j]),,nó lai k dược,,,k bít là vấn đề nó nằm chỗ

nào nữa

Sắp xếp ntn ,nói rõ ra đi.Không thì viết chương trình sắp xếp như trên cũng được . 


>>> 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


#27
vanlong12

vanlong12

    Binh nhất

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

Sắp xếp ntn ,nói rõ ra đi.Không thì viết chương trình sắp xếp như trên cũng được . 

lam kiểu này nè
 
uses crt;
var a:array[1..10,1..10]of string;
b:array[1..100]of string;
var c,m,n,t,i,j,k,l,s:integer;
st,vt:string;
begin
clrscr;
write('nhap xau:');readln(st);
write('nhap n:');readln(n);
k:=1;  m:=0;
for i:=1 to n do
for j:=1 to n do
begin
a[j,i]:=st[k];
k:=k+1;
end;
s:=0;
write('mang la:');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
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_ +


#28
Mystic

Mystic

    Thượng sĩ

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

 

lam kiểu này nè
 
uses crt;
var a:array[1..10,1..10]of string;
b:array[1..100]of string;
var c,m,n,t,i,j,k,l,s:integer;
st,vt:string;
begin
clrscr;
write('nhap xau:');readln(st);
write('nhap n:');readln(n);
k:=1;  m:=0;
for i:=1 to n do
for j:=1 to n do
begin
a[j,i]:=st[k];
k:=k+1;
end;
s:=0;
write('mang la:');
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
readln
end.

 

Thế này ko đc bạn ạ :)

n là là số dãy con chia được ,được chia từ xâu ban đầu chứ ko phải nhập từ bàn phím.


>>> 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


#29
vanlong12

vanlong12

    Binh nhất

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

Thế này ko đc bạn ạ :)

n là là số dãy con chia được ,được chia từ xâu ban đầu chứ ko phải nhập từ bàn phím.

thì minh dung sqrt(length(x)) là được,,nó cum jung nhau...


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

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


#30
Mystic

Mystic

    Thượng sĩ

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

thì minh dung sqrt(length(x)) là được,,nó cum jung nhau...

Nếu vậy thì phải sửa lại k=sqrt(length(s)), hay gì đó

Rồi chạy đến k thì mới phù hợp.Chứ nếu mà nhập n rồi chạy đến n và gán gt cho mảng thì  ko được !


>>> 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


#31
vanlong12

vanlong12

    Binh nhất

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

uk

 

Nếu vậy thì phải sửa lại k=sqrt(length(s)), hay gì đó

Rồi chạy đến k thì mới phù hợp.Chứ nếu mà nhập n rồi chạy đến n và gán gt cho mảng thì  ko được !

m,,chẳng wa tau làm vội,,,mà mi thử coi ,,sua theo cach đó hắn có được k


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

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


#32
Mystic

Mystic

    Thượng sĩ

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

uk

 

m,,chẳng wa tau làm vội,,,mà mi thử coi ,,sua theo cach đó hắn có được k

Ý tưởng cũng hay .

Ở đoạn ord á thì do a[i,j] ko phải là 1 ký tự nên nó báo lỗi


>>> 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


#33
truong9bthcstb

truong9bthcstb

    Binh nhì

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

có ai có tài liệu ôn thi hsg tin thành phố hà nội không 



#34
truong9bthcstb

truong9bthcstb

    Binh nhì

  • Thành viên
  • 15 Bài viết
ues crt;
var n,i,s,a,b:integer;
function kt_nt(x:integer):boolean;
var i:integer;
    kt:boolean;
begin
   kt:=true;
   if x<=1 then kt:=false;
   for i:=2 to trunc(sqrt(x)) do
   if x mod i=0 then kt:=false;
   kt_nt:=kt;
end;
function nt_rg(n:integer):integer;
var i,s:integer;
begin
   s:=0;
   for i:=1 to n do
   if (kt_nt(i)) and (n mod i=0) then
   s:=s+i;
   nt_rg:=s;
end;
begin
   clrscr;
   writeln('nhap n,a,b: '); readln(n,a,b);
   writeln('so nguyen to rut gon: ',nt_rg(n));
   for i:=a to b do
   begin
      if nt_rg(n)=nt_rg(i) then
         write(i,' ');
   end;
   readln;
end.


#35
truong9bthcstb

truong9bthcstb

    Binh nhì

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

Đề thi học sinh giỏi tin học thành phố Hà Nội 2015-2016

File gửi kèm

  • File gửi kèm  Doc1.pdf   816.43K   418 Số lần tải


#36
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

Không ai giải thì mình làm luôn vậy :

 

program jop;
uses crt;
var s,th,cc,a,b,te:string;
zz:array[1..100] of string;
i,j,k,g,kk,x,ss,l,t,ko,tg:integer;
z:array[1..100] of integer;
begin
clrscr;
l:=0;
repeat
        write('Nhap xau: ');readln(s);
        t:=length(s) mod 10;
        if (t<>2)and(t<>3)and(t<>7)and(t<>8) then break;
        writeln('Nhap so ky tu la so chinh phuong !');
until false;
for i:=1 to length(s) do
        if length(s) div i=i then
                begin
                ko:=i;
                break;
                end;
i:=1;j:=1;
repeat
        a:=a+s[i];
        i:=i+ko;
        if length(a) mod ko=0 then
                begin
                j:=j+1;
                i:=j;
                end;
until length(a)=length(s);
t:=0;
for i:=1 to ko do
        begin
        t:=t+ord(a[i]);
        b:=b+a[i];
        z[1]:=t;
        zz[1]:=b;
        end;
kk:=ko+1;ss:=ko;th:='';k:=2;
repeat
        ss:=ss+ko;
        for i:=kk to ss do
        begin
        th:=th+a[i];
        l:=l+ord(a[i]);
        end;
         z[k]:=l;
         z[k+1]:=t;
         zz[k]:=th;
         zz[k+1]:=b;
         k:=k+2;
        th:='';
       l:=0;
       kk:=ss+1;
until ss=length(s);
for i:=1 to k-1 do
for j:=i+1 to k do
if z[i]<z[j] then
        begin
        tg:=z[i];
        z[i]:=z[j];
        z[j]:=tg;
        te:=zz[i];
        zz[i]:=zz[j];
        zz[j]:=te;
        end;
writeln('a) ',zz[1]);
for i:=1 to k do
if (z[i]=z[1])and(zz[i]<>zz[1]) then
writeln('   ',zz[i]);
writeln('b) ',z[1]);
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


#37
perfectstrong

perfectstrong

    $LOVE(x)|_{x =\alpha}^\Omega=+\infty$

  • Quản lý Toán Ứng dụng
  • 4990 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

 

Một bài khá giống nhưng khó hơn:

 

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:

                        $F_1=1, F_2=1, F_i=F_{i-1}+F_{i-2}$ với $i>2$.

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

 

INPUT: cho file FIBO.INP chứa số $N$ ($N \le 2.10^9$)         

OUTPUT: ghi ra file FIBO.OUT biểu diễn số $N$ thành tổng của các số Fibonaci khác nhau với số hạng tử là nhiều nhất.


Luôn yêu để sống, luôn sống để học toán, luôn học toán để yêu!!! :D
$$\text{LOVE}\left( x \right)|_{x = \alpha}^\Omega = + \infty $$
I'm still there everywhere.

#38
perfectstrong

perfectstrong

    $LOVE(x)|_{x =\alpha}^\Omega=+\infty$

  • Quản lý Toán Ứng dụng
  • 4990 Bài viết

 

Đây là cách của mình :

 

function fibo(n:longint):boolean;
var i,x1,x2,x:longint;
kt:boolean;
begin
kt:=false;
x1:=0;
x2:=1;
for i:=1 to n do
begin
x:=x1+x2;
x1:=x2;
x2:=x;
if x=n then kt:=true;
end;
fibo:=kt;
end;

 

Không nên dùng hàm này để tính $F_n$ với mỗi $n$ vì khi $n$ càng lớn, ta phải tính đi tính lại một công đoạn rất nhiều lần, như thuật toán bạn đề ra. Thay vì vậy, nên tạo một mảng vừa lưu trữ, vừa dùng để tính.

var	array_Fibo[1..75]:longword;
/*=========================*/
procedure generateFibo(limit: longword);
var	index:word;
begin
	array_Fibo[1] := 1;
	array_Fibo[2] := 1;
	index := 2;
	repeat
	index:=index+1;
	array_Fibo[index]:=array_Fibo[index-1]+array_Fibo[index-2];
	until array_Fibo[index]>=limit;
end;

Luôn yêu để sống, luôn sống để học toán, luôn học toán để yêu!!! :D
$$\text{LOVE}\left( x \right)|_{x = \alpha}^\Omega = + \infty $$
I'm still there everywhere.

#39
Mystic

Mystic

    Thượng sĩ

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

 

Không nên dùng hàm này để tính $F_n$ với mỗi $n$ vì khi $n$ càng lớn, ta phải tính đi tính lại một công đoạn rất nhiều lần, như thuật toán bạn đề ra. Thay vì vậy, nên tạo một mảng vừa lưu trữ, vừa dùng để tính.

var	array_Fibo[1..75]:longword;
/*=========================*/
procedure generateFibo(limit: longword);
var	index:word;
begin
	array_Fibo[1] := a;
	array_Fibo[2] := b;
	indice := 2;
	repeat
	index:=index+1;
	array_Fibo[index]:=array_Fibo[index-1]+array_Fibo[index-2];
	until array_Fibo[index]>=limit;
end;

Thuật toán của vbanj thì không sai nhưng có 1 số hạn chế sau:

- Số ô nhớ trong mảng quá ít 

- Ở đoạn procedure thì phải là var limit:longword;(vì limit sẽ thay đổi khi ta nhập vào 1 số khác,không dùng var khi sử dụng hàm !)

- Ở phần chữ đỏ có vẻ bạn viết sai chính tả :))

Còn lại thì ý tưởng rất hay,mình cũng phục :)


>>> 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


#40
perfectstrong

perfectstrong

    $LOVE(x)|_{x =\alpha}^\Omega=+\infty$

  • Quản lý Toán Ứng dụng
  • 4990 Bài viết

Thuật toán của vbanj thì không sai nhưng có 1 số hạn chế sau:

- Số ô nhớ trong mảng quá ít 

- Ở đoạn procedure thì phải là var limit:longword;(vì limit sẽ thay đổi khi ta nhập vào 1 số khác,không dùng var khi sử dụng hàm !)

- Ở phần chữ đỏ có vẻ bạn viết sai chính tả :))

Còn lại thì ý tưởng rất hay,mình cũng phục :)

- Số ô nhớ đó là đủ, vì số Fibonnacci thứ 75 đã lên tới 7 tỷ rồi, trong khi giới hạn của đề chỉ là 2 tỷ.

- Ta chỉ sử dụng chữ var trong khung ngoặc của procedure khi và chỉ khi ta cần thay đổi giá trị ta cung cấp cho procedure (tức là cung cấp tham biến). Thuật toán trên không đả động gì tới thay đổi limit nên không cần phải thêm var.

- Phần chữ đó là để dấu cách dòng cho dễ nhìn thôi, lâu rồi mình không viết pascal nên quên mất cách viết phần comment thế nào.


Luôn yêu để sống, luôn sống để học toán, luôn học toán để yêu!!! :D
$$\text{LOVE}\left( x \right)|_{x = \alpha}^\Omega = + \infty $$
I'm still there everywhere.




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

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