Đến nội dung


Chú ý

Nếu các bạn đăng kí thành viên mà không nhận được email kích hoạt thì hãy kiểm tra thùng thư rác (spam). Nếu không biết cách truy cập vào thùng thư rác thì các bạn chịu khó Google hoặc đăng câu hỏi vào mục Hướng dẫn - Trợ giúp để thành viên khác có thể hỗ trợ.


Hình ảnh

Lập trình Pascal

pascal

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

#1 namcpnh

namcpnh

    Red Devil

  • Hiệp sỹ
  • 1148 Bài viết
  • Giới tính:Nam
  • Đến từ:Ho Chi Minh University of Science
  • Sở thích:Abstract and Applied Analysis

Đã gửi 22-02-2013 - 18:24

Viết chương trình nhập từ bàn phím số nguyên dương $N(N\leq 100)$ và dãy A gồm N số nguyên $A_1,A_2,...,A_n$ có giá trị tuyệt đối không lớn hơn $1000$. Hãy cho biết dãy A có phải là cấp số cộng hay không và thông báo ra màn hình ?

Cùng chung sức làm chuyên đề hay cho diễn đàn tại :

Dãy số-giới hạn, Đa thức , Hình học , Phương trình hàm , PT-HPT-BPT , Số học.

Wolframalpha đây


#2 Primary

Primary

    Sĩ quan

  • Thành viên
  • 316 Bài viết
  • Giới tính:Nam
  • Đến từ:Việt Nam Tiền Giang

Đã gửi 22-02-2013 - 19:02

Viết chương trình nhập từ bàn phím số nguyên dương $N(N\leq 100)$ và dãy A gồm N số nguyên $A_1,A_2,...,A_n$ có giá trị tuyệt đối không lớn hơn $1000$. Hãy cho biết dãy A có phải là cấp số cộng hay không và thông báo ra màn hình ?

Em mới học lớp 10 nên làm thử
Uses crt;
Var i,j,N,T,tam : integer;
kt : boolean;
a : array[1..100] of integer;
Begin
clrscr;
Repeat
write('Nhap N='); readln(N);
Until ($N>=1$) and ($N<=100$)
writeln('Nhap day so nguyen co tri tuyet doi $<=1000$')
For $i:=1$ to N do
begin write('$a[',i,']=$'); readln($a[i]$); end;
Write('Sap xep day A tang: ');
For $i:=1$ to N do
for $j:=2$ to N-1 do $If$ $a[j]>a[i]$ then
begin tam$:=a[j]$; $a[j]:=a[i]$; $a[i]:=$tam; end;
kt:=true;
$T:=a[2]-a[1]$;
For $i:=1$ to N-1 do
If $a[i+1]-a[i]<>T$ then kt:= False;
If kt=true then write('Day A la cap so cong') else write('Day A khong la cap so cong');
Readln
End.

Bài viết đã được chỉnh sửa nội dung bởi Primary: 22-02-2013 - 19:03

Nothing won't change 

 

$\lim_{n\rightarrow \infty }\ln[h(t)]=117771$


#3 vtttuong

vtttuong

    Lính mới

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

Đã gửi 13-06-2014 - 10:13

Qui trình ốc sên
Một con ốc sên bò lên 1 ngọn cây có chiều dài n (đơn vị độ dài). Ban ngày trời nắng nóng nó nên nó chỉ bò lên cao được 1 (đơn vị độ dài) và hao tổn 2 (đơn vị năng lượng). Đến ban đêm trời mát mẻ nó có thể trèo lên cao được một đoạn gấp đôi đoạn đường đã có trước đây nhưng nó sẽ mất 4 (đơn vị năng lượng)
Lịch trình bò lên của con ốc sên được kí hiệu bằng N và D nếu ốc sên bò lúc ban ngày thì được ghi N con ban đêm thi ghi D
Yêu cầu: Hãy chỉ cho ốc sên một lịch trình bò lên ngon cây sao cho vừa đúng lên tới ngọn và lượng năng lượng tiêu tốn là ít nhất. Giả thuyêt lúc ban đầu ốc sên đã ở trên cây với khoảng cách đến mặt đất là 1 (đơn vị độ dài)
Dữ liệu vào: Nhập từ bàn phím 1 so nguyên dương N(N<=10000)
Dữ liệu ra: Đưa ra màn hình gồm hai dòng.Dòng đầu ghi một sô nguyên dương là năng lượng ốc sên đã tiêu tốn, dòng tiếp theo ghi chuỗi kí tự N và D
Input 
10

Output

12
NDND



#4 nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết
  • Giới tính:Nam
  • Đến từ:đâu?
  • Sở thích:code, code, code and code!

Đã gửi 16-07-2014 - 20:14

Qui trình ốc sên
Một con ốc sên bò lên 1 ngọn cây có chiều dài n (đơn vị độ dài). Ban ngày trời nắng nóng nó nên nó chỉ bò lên cao được 1 (đơn vị độ dài) và hao tổn 2 (đơn vị năng lượng). Đến ban đêm trời mát mẻ nó có thể trèo lên cao được một đoạn gấp đôi đoạn đường đã có trước đây nhưng nó sẽ mất 4 (đơn vị năng lượng)
Lịch trình bò lên của con ốc sên được kí hiệu bằng N và D nếu ốc sên bò lúc ban ngày thì được ghi N con ban đêm thi ghi D
Yêu cầu: Hãy chỉ cho ốc sên một lịch trình bò lên ngon cây sao cho vừa đúng lên tới ngọn và lượng năng lượng tiêu tốn là ít nhất. Giả thuyêt lúc ban đầu ốc sên đã ở trên cây với khoảng cách đến mặt đất là 1 (đơn vị độ dài)
Dữ liệu vào: Nhập từ bàn phím 1 so nguyên dương N(N<=10000)
Dữ liệu ra: Đưa ra màn hình gồm hai dòng.Dòng đầu ghi một sô nguyên dương là năng lượng ốc sên đã tiêu tốn, dòng tiếp theo ghi chuỗi kí tự N và D
Input 
10

Output

12
NDND

Mình làm ý tưởng thế này không biết đúng không!

         var s:string;

       n,i,d:integer;
       begin
       repeat
       write('n=');
       readln(n);
       until (n>=1)and(n<=10000);
       s:=''; d:=0;
       while n>1 do
             begin
             if (n mod 2<>0)or(n=2) then
                begin
                 n:=n-1;
                 s:=s+'N';
                 d:=d+2;
                end
             else
                 begin
                  n:= n div 2;
                  s:=s+'D';
                  d:=d+4;
                 end;
             end;
       writeln('nang luong ton : ',d);
       for i:=length(s) downto 1  do
           write(s[i]);
       readln;
       end.


#5 hocpascal

hocpascal

    Trung sĩ

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

Đã gửi 20-07-2014 - 14:22

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

Bài 1: Số đối xứng 

Tìm các số nhiên N (100<N<47 000) thoả mãn: N và N2 đều là số đối xứng (Số đối xứng là số nếu viết các chữ số của nó theo thứ tự ngược lại thì giá trị của nó không thay đổi, ví dụ số 10301 hay 2332 là các số đối xứng).

          Kết quả đưa ra màn hình gồm một số dòng, trên mỗi dòng ghi 2 số N và N2 , các số cách nhau tối thiểu một dấu cách.

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.

Bài 3: Các số khác nhau 

Cho dãy gồm N số nguyên dương (N≤ 1000). Hãy kiểm tra xem có bao

nhiêu số khác nhau trong dãy.

·          Dữ liệu vào: Từ tệp DAYSO.INP gồm dòng đầu là số N, trong các dòng sau ghi các số của dãy, mỗi số cách nhau tối thiểu một dấu cách.

·          Kết quả: Ghi ra tệp DAYSO.OUT dòng đầu ghi số nguyên K, là số lượng các số khác nhau trong dãy. Trong các dòng sau ghi K số khác nhau tìm được trong dãy, mỗi dòng ghi 15 số.

          Ví dụ

DAYSO.INP

10

5 8 12 5 6 8 5 8 4 9

DAYSO.OUT

6

5 8 12 6 4 9

      

 Bài 4. Tổng các số 

Cho số nguyên N (1 ≤ N ≤ 109). Bằng cách sử dụng các chữ số liên tiếp của N (viết trong hệ thập phân), ta thu được các số nguyên khác nhau. Hãy tính tổng của các số nguyên này.

Ví dụ: Nếu N = 202, có thể thu được các số: 2, 0, 2, 20, 02, 202. Bỏ đi các số nguyên trùng nhau ta được các số: 2, 0, 20, 202. Khi đó tổng cần tìm sẽ là 2+0+20+202=224.

·        Dữ liệu vào: Từ tệp SUM.INP, gồm 10 dòng, mỗi dòng là một số nguyên

N (điều kiện : 1 ≤ N ≤ 109). ;

·        Kết quả: Đưa ra tệp SUM.OUT, gồm 10 dòng, mỗi dòng là tổng tìm được

tương ứng với các dòng trong tệp SUM.INP.

SUM.INP

202

6742

...

SUM.OUT

224

8360

...

Bài 5: Đổi chỗ 

Tìm số tự nhiên nhỏ nhất có chữ số hàng đơn vị là D, sao cho khi chuyển chữ số hàng đơn vị lên vị trí trước chữ số đầu tiên của số đó thì được số mới gấp K lần số cũ.

·          Dữ liệu vào: Nhập từ tệp MOVE.INP gồm 2 số nguyên D và K, các số cách nhau tối thiểu một dấu cách.

·          Kết quả: Ghi vào tệp MOVE.OUT số tìm được, hoặc -1 nếu không tìm được số thoả mãn.

Ví dụ

MOVE.INP

7  5

MOVE.OUT

142857


Bài viết đã được chỉnh sửa nội dung bởi hocpascal: 20-07-2014 - 14:28


#6 nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết
  • Giới tính:Nam
  • Đến từ:đâu?
  • Sở thích:code, code, code and code!

Đã gửi 20-07-2014 - 17:30



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

Bài 1: Số đối xứng 

Tìm các số nhiên N (100<N<47 000) thoả mãn: N và N2 đều là số đối xứng (Số đối xứng là số nếu viết các chữ số của nó theo thứ tự ngược lại thì giá trị của nó không thay đổi, ví dụ số 10301 hay 2332 là các số đối xứng).

          Kết quả đưa ra màn hình gồm một số dòng, trên mỗi dòng ghi 2 số N và N2 , các số cách nhau tối thiểu một dấu cách.

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.

Bài 3: Các số khác nhau 

Cho dãy gồm N số nguyên dương (N≤ 1000). Hãy kiểm tra xem có bao

nhiêu số khác nhau trong dãy.

·          Dữ liệu vào: Từ tệp DAYSO.INP gồm dòng đầu là số N, trong các dòng sau ghi các số của dãy, mỗi số cách nhau tối thiểu một dấu cách.

·          Kết quả: Ghi ra tệp DAYSO.OUT dòng đầu ghi số nguyên K, là số lượng các số khác nhau trong dãy. Trong các dòng sau ghi K số khác nhau tìm được trong dãy, mỗi dòng ghi 15 số.

          Ví dụ

DAYSO.INP

10

5 8 12 5 6 8 5 8 4 9

DAYSO.OUT

6

5 8 12 6 4 9

      

 Bài 4. Tổng các số 

Cho số nguyên N (1 ≤ N ≤ 109). Bằng cách sử dụng các chữ số liên tiếp của N (viết trong hệ thập phân), ta thu được các số nguyên khác nhau. Hãy tính tổng của các số nguyên này.

Ví dụ: Nếu N = 202, có thể thu được các số: 2, 0, 2, 20, 02, 202. Bỏ đi các số nguyên trùng nhau ta được các số: 2, 0, 20, 202. Khi đó tổng cần tìm sẽ là 2+0+20+202=224.

·        Dữ liệu vào: Từ tệp SUM.INP, gồm 10 dòng, mỗi dòng là một số nguyên

N (điều kiện : 1 ≤ N ≤ 109). ;

·        Kết quả: Đưa ra tệp SUM.OUT, gồm 10 dòng, mỗi dòng là tổng tìm được

tương ứng với các dòng trong tệp SUM.INP.

SUM.INP

202

6742

...

SUM.OUT

224

8360

...

Bài 5: Đổi chỗ 

Tìm số tự nhiên nhỏ nhất có chữ số hàng đơn vị là D, sao cho khi chuyển chữ số hàng đơn vị lên vị trí trước chữ số đầu tiên của số đó thì được số mới gấp K lần số cũ.

·          Dữ liệu vào: Nhập từ tệp MOVE.INP gồm 2 số nguyên D và K, các số cách nhau tối thiểu một dấu cách.

·          Kết quả: Ghi vào tệp MOVE.OUT số tìm được, hoặc -1 nếu không tìm được số thoả mãn.

Ví dụ

MOVE.INP

7  5

MOVE.OUT

142857

Tạm thời mới làm đc bài 1 vs bài 3 cái đã :v, bài 5 bạn nói rõ điều kiện về dữ liệu dc k?

 
bài 1:
var i,j,n:longint;
 function dx(n:longint):boolean;
          var s:string; i:longint;
          begin
          i:=n;
            str(i,s);
            dx:=true;
            for i:=1 to length(s) div 2 do
                if s[i]<>s[length(s)-i+1] then
                   begin
                   dx:=false;
                   break;
                   end;
          end;
 begin
 j:=0;
 for i:=101 to 46999 do
     if dx(i)=true then
        if dx(i*i)=true then
           begin
           j:=j+1;
           writeln(i,'    ',i*i);
           end;
           writeln(j);
        readln;
        end.
Bài 3:var  a,b:array[1..1000] of integer;
     i,j,n,d:integer;  c:boolean;
begin
write('n=');
readln(n);
for i:=1 to n do
    begin
    write('a[',i,'=');
    readln(a[i]);
    end;
d:=0;
for i:=1 to n do
    begin
    c:=true;
    for j:=1 to i-1 do
    if a[i]=a[j] then
       begin
        c:=false;
        break;
       end;
    if c=true then
       begin
       d:=d+1;
       b[d]:=a[i];
       end;
    end;
    writeln(d);
        for i:=1 to d do
            begin
            write(b[i],'  ');
            if i mod 15=0 then writeln;
            end;
    readln;
    end.  
ps : mình không làm kiểu file


#7 nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết
  • Giới tính:Nam
  • Đến từ:đâu?
  • Sở thích:code, code, code and code!

Đã gửi 20-07-2014 - 18:02

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.


#8 hocpascal

hocpascal

    Trung sĩ

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

Đã gửi 20-07-2014 - 22:10



 

Tạm thời mới làm đc bài 1 vs bài 3 cái đã :v, bài 5 bạn nói rõ điều kiện về dữ liệu dc k?

 
bài 1:
var i,j,n:longint;
 function dx(n:longint):boolean;
          var s:string; i:longint;
          begin
          i:=n;
            str(i,s);
            dx:=true;
            for i:=1 to length(s) div 2 do
                if s[i]<>s[length(s)-i+1] then
                   begin
                   dx:=false;
                   break;
                   end;
          end;
 begin
 j:=0;
 for i:=101 to 46999 do
     if dx(i)=true then
        if dx(i*i)=true then
           begin
           j:=j+1;
           writeln(i,'    ',i*i);
           end;
           writeln(j);
        readln;
        end.
Bài 3:var  a,b:array[1..1000] of integer;
     i,j,n,d:integer;  c:boolean;
begin
write('n=');
readln(n);
for i:=1 to n do
    begin
    write('a[',i,'=');
    readln(a[i]);
    end;
d:=0;
for i:=1 to n do
    begin
    c:=true;
    for j:=1 to i-1 do
    if a[i]=a[j] then
       begin
        c:=false;
        break;
       end;
    if c=true then
       begin
       d:=d+1;
       b[d]:=a[i];
       end;
    end;
    writeln(d);
        for i:=1 to d do
            begin
            write(b[i],'  ');
            if i mod 15=0 then writeln;
            end;
    readln;
    end.  
ps : mình không làm kiểu file

 

Diễn đàn này hay và bổ ích quá! cứ thank ban trước đã. Mình test the xem nha

Còn bài 5 đề rõ rồi mà trong ví dụ đưa ra nếu đưa 7 lên trên đầu ta được số 714285 số này = 142857 *5



#9 nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết
  • Giới tính:Nam
  • Đến từ:đâu?
  • Sở thích:code, code, code and code!

Đã gửi 21-07-2014 - 08:22

 

Bài 5: Đổi chỗ 

Tìm số tự nhiên nhỏ nhất có chữ số hàng đơn vị là D, sao cho khi chuyển chữ số hàng đơn vị lên vị trí trước chữ số đầu tiên của số đó thì được số mới gấp K lần số cũ.

·          Dữ liệu vào: Nhập từ tệp MOVE.INP gồm 2 số nguyên D và K, các số cách nhau tối thiểu một dấu cách.

·          Kết quả: Ghi vào tệp MOVE.OUT số tìm được, hoặc -1 nếu không tìm được số thoả mãn.

Ví dụ

MOVE.INP

7  5

MOVE.OUT

142857

var i,j,d,k,n:longint;   b:boolean;
begin
write('d,k=');
readln(d,k);
b:=false;
for i:=0 to 8 do
    begin
     if i=0 then n:=d
     else n:=n*10;
     if (n-d*k)mod (k*10-1)=0 then
        begin
        b:=true;
        n:=(n-d*k)div(k*10-1);
        break;
        end;
    end;
    if b=true then writeln(n,d)
    else writeln(-1);
readln;
end.
ps: tuỳ vào dữ liệu có thể chuyển'8' thành '9','10',.... ,k biết thuật toán này đúng không nữa, mới nghĩ ra!


#10 hocpascal

hocpascal

    Trung sĩ

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

Đã gửi 21-07-2014 - 08:30

Cảm ơn bạn nhưng mình e rằng thuật toán này có phần giới hạn

mình thấy nó phức tạp quá với mấy con số lơn thì phải. mình cũng thử test bài này như sau:

Xét tất cả các số chia hết cho 5. Giả sử mỗi số đó có thể chia hết cho Xi chữ số 5.
Cộng tất cả các Xi đó lại thì ta được số chữ số 0.
Giả sử 25! = 15511210043330985984000000 có 6 chữ số 0 tận cùng.
ta có
5 chia hết cho 1 chữ số 5
10 chia hết cho 1 chữ số 5
15 chia hết cho 1 chữ số 5
20 chia hết cho 1 chữ số 5
25 chia hết cho 2 chữ số 5
-> suy ra tổng là 6 (đúng với kết quả là có 6 chữ số 0).

var

n, i, j, count: longint;
begin
write('Nhap N (N>=1): '); readln(n);
for i:=1 to n do
begin
j:=i;
while j mod 5 = 0 do
begin
j:=j div 5;
count:=count+1;
end;
end;
write(' So chu so 0 cuoi cua ',n,'! la: ',count); readln;
end.



#11 hocpascal

hocpascal

    Trung sĩ

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

Đã gửi 21-07-2014 - 08:41

 

var i,j,d,k,n:longint;   b:boolean;
begin
write('d,k=');
readln(d,k);
b:=false;
for i:=0 to 8 do
    begin
     if i=0 then n:=d
     else n:=n*10;
     if (n-d*k)mod (k*10-1)=0 then
        begin
        b:=true;
        n:=(n-d*k)div(k*10-1);
        break;
        end;
    end;
    if b=true then writeln(n,d)
    else writeln(-1);
readln;
end.
ps: tuỳ vào dữ liệu có thể chuyển'8' thành '9','10',.... ,k biết thuật toán này đúng không nữa, mới nghĩ ra!

 

bài làm hay và đơn giản quá, nó đúng với nhiều test tuy nhiên với các test (9,8);(8,2),(6,2); (9,7) thì kết quả -1. Hay là giới hạn của kiểu dữ liệu nhỉ? bạn xem lại tí nha



#12 hocpascal

hocpascal

    Trung sĩ

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

Đã gửi 21-07-2014 - 08:44

 

var i,j,d,k,n:longint;   b:boolean;
begin
write('d,k=');
readln(d,k);
b:=false;
for i:=0 to 8 do
    begin
     if i=0 then n:=d
     else n:=n*10;
     if (n-d*k)mod (k*10-1)=0 then
        begin
        b:=true;
        n:=(n-d*k)div(k*10-1);
        break;
        end;
    end;
    if b=true then writeln(n,d)
    else writeln(-1);
readln;
end.
ps: tuỳ vào dữ liệu có thể chuyển'8' thành '9','10',.... ,k biết thuật toán này đúng không nữa, mới nghĩ ra!

 

bài làm hay và đơn giản quá, nó đúng với nhiều test tuy nhiên với các test (9,8);(8,2),(6,2); (9,7) thì kết quả -1. Hay là giới hạn của kiểu dữ liệu nhỉ? bạn xem lại tí nha. thank bạn nha!



#13 nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết
  • Giới tính:Nam
  • Đến từ:đâu?
  • Sở thích:code, code, code and code!

Đã gửi 21-07-2014 - 08:52

 Bài 4. Tổng các số 

Cho số nguyên N (1 ≤ N ≤ 109). Bằng cách sử dụng các chữ số liên tiếp của N (viết trong hệ thập phân), ta thu được các số nguyên khác nhau. Hãy tính tổng của các số nguyên này.

Ví dụ: Nếu N = 202, có thể thu được các số: 2, 0, 2, 20, 02, 202. Bỏ đi các số nguyên trùng nhau ta được các số: 2, 0, 20, 202. Khi đó tổng cần tìm sẽ là 2+0+20+202=224.

·        Dữ liệu vào: Từ tệp SUM.INP, gồm 10 dòng, mỗi dòng là một số nguyên

N (điều kiện : 1 ≤ N ≤ 109). ;

·        Kết quả: Đưa ra tệp SUM.OUT, gồm 10 dòng, mỗi dòng là tổng tìm được

tương ứng với các dòng trong tệp SUM.INP.

SUM.INP

202

6742

...

SUM.OUT

224

8360

...

 

var a:array[1..20] of string;
    n,m:longint;
    s,s1:string;   b:boolean;
    i,j,t,z,d:integer;
    begin
    repeat
    write('n=');
    readln(n);
    until (1<=n)and(n<=1000000000);
    m:=0;
    str(n,s);
    for i:=1 to length(s) do
        begin
        t:=0;
        for j:=1 to length(s)-i+1 do
            begin
            s1:=copy(s,j,i);
            if s1[1]<>'0' then
               begin
               b:=true;
               for z:=1 to t do
                   if s1=a[z] then
                      begin
                      b:=false;
                      break;
                      end;
               if b=true then
                  begin
                  t:=t+1;
                  a[t]:=s1;
                  end;
               end;
            end;
        for j:=1 to t do
            begin
            val(a[j],n,d);
            m:=m+n;
            end;
        end;
        writeln(m);
    readln;
    end.


#14 nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết
  • Giới tính:Nam
  • Đến từ:đâu?
  • Sở thích:code, code, code and code!

Đã gửi 21-07-2014 - 08:58

bài làm hay và đơn giản quá, nó đúng với nhiều test tuy nhiên với các test (9,8);(8,2),(6,2); (9,7) thì kết quả -1. Hay là giới hạn của kiểu dữ liệu nhỉ? bạn xem lại tí nha. thank bạn nha!

là do kiểu dữ liệu đó, nếu chuẩn hơn, thì mình có thể làm trên xâu, nhưng làm trên xâu thì mất nhiều công sức lắm, mình chưa có thời gian nghiên cứu về cái đó!



#15 hocpascal

hocpascal

    Trung sĩ

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

Đã gửi 21-07-2014 - 09:33

 

 Bài 4. Tổng các số 

Cho số nguyên N (1 ≤ N ≤ 109). Bằng cách sử dụng các chữ số liên tiếp của N (viết trong hệ thập phân), ta thu được các số nguyên khác nhau. Hãy tính tổng của các số nguyên này.

Ví dụ: Nếu N = 202, có thể thu được các số: 2, 0, 2, 20, 02, 202. Bỏ đi các số nguyên trùng nhau ta được các số: 2, 0, 20, 202. Khi đó tổng cần tìm sẽ là 2+0+20+202=224.

·        Dữ liệu vào: Từ tệp SUM.INP, gồm 10 dòng, mỗi dòng là một số nguyên

N (điều kiện : 1 ≤ N ≤ 109). ;

·        Kết quả: Đưa ra tệp SUM.OUT, gồm 10 dòng, mỗi dòng là tổng tìm được

tương ứng với các dòng trong tệp SUM.INP.

SUM.INP

202

6742

...

SUM.OUT

224

8360

...

 

var a:array[1..20] of string;
    n,m:longint;
    s,s1:string;   b:boolean;
    i,j,t,z,d:integer;
    begin
    repeat
    write('n=');
    readln(n);
    until (1<=n)and(n<=1000000000);
    m:=0;
    str(n,s);
    for i:=1 to length(s) do
        begin
        t:=0;
        for j:=1 to length(s)-i+1 do
            begin
            s1:=copy(s,j,i);
            if s1[1]<>'0' then
               begin
               b:=true;
               for z:=1 to t do
                   if s1=a[z] then
                      begin
                      b:=false;
                      break;
                      end;
               if b=true then
                  begin
                  t:=t+1;
                  a[t]:=s1;
                  end;
               end;
            end;
        for j:=1 to t do
            begin
            val(a[j],n,d);
            m:=m+n;
            end;
        end;
        writeln(m);
    readln;
    end.

 

May quá gặp đúng pro pascal rồi. Bạn xem lại hộ tớ câu 1 chương trình thì hoàn toàn đúng nhưng với free pascal thì kiêu dữ liệu longint không chạy được, báo lỗi 215 



#16 hocpascal

hocpascal

    Trung sĩ

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

Đã gửi 21-07-2014 - 09:39

là do kiểu dữ liệu đó, nếu chuẩn hơn, thì mình có thể làm trên xâu, nhưng làm trên xâu thì mất nhiều công sức lắm, mình chưa có thời gian nghiên cứu về cái đó!

Vậy nếu đi thi thì mất nhiều test lắm bạn à? thế ngoài kiểu xâu không có cách sửa à ban? mình thấy kiểu int64 trong pascal cung không được nữa, mà bài đó làm bằng xâu chắc không kịp thời gian quá



#17 hocpascal

hocpascal

    Trung sĩ

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

Đã gửi 21-07-2014 - 12:05

bài 1 đấy bạn a`. Nhưng chạy turbo thì ok, còn bài 5 thì mất 4 test nếu đi thi mất 1 điểm hì

Bài 1: Trong dịp nghỉ hè, bé Mai được bố mẹ cho đi tắm biển. Trên bờ biển bé nhặt được N viên đá cuội rất đẹp mắt. Mai quyết định vẽ trên cát một lưới hình chữ nhật kích thước a x b (a, b nguyên dương) được chia thành a x b ô vuông bằng các đường ngang dọc sao cho có thể rải N hòn sỏi này vào các ô vuông sao cho mỗi ô vuông có nhiều nhất một viên sỏi.

Hãy giúp bé Mai chọn kích thước của hình chữ nhật sao cho chu vi của nó là nhỏ nhất. In ra màn hình giá trị chu vi này.

Dữ liệu: Nhập vào từ bàn phím số nguyên dương N (N ≤ 109).

Kết quả: Ghi ra màn hình chu vi của hình chữ nhật tìm được

Ví dụ:

Dữ liệu nhập vào: 15

Kết quả in ra: 16

Giải thích: Hình chữ nhật tìm được có kích thước 4 x 4

Bạn xem bài này có lời giait tốt hơn không? mình giải chưa được tốt lắm.



#18 nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết
  • Giới tính:Nam
  • Đến từ:đâu?
  • Sở thích:code, code, code and code!

Đã gửi 21-07-2014 - 13:02

Bài 1: Trong dịp nghỉ hè, bé Mai được bố mẹ cho đi tắm biển. Trên bờ biển bé nhặt được N viên đá cuội rất đẹp mắt. Mai quyết định vẽ trên cát một lưới hình chữ nhật kích thước a x b (a, b nguyên dương) được chia thành a x b ô vuông bằng các đường ngang dọc sao cho có thể rải N hòn sỏi này vào các ô vuông sao cho mỗi ô vuông có nhiều nhất một viên sỏi.

Hãy giúp bé Mai chọn kích thước của hình chữ nhật sao cho chu vi của nó là nhỏ nhất. In ra màn hình giá trị chu vi này.

Dữ liệu: Nhập vào từ bàn phím số nguyên dương N (N ≤ 109).

Kết quả: Ghi ra màn hình chu vi của hình chữ nhật tìm được

Ví dụ:

Dữ liệu nhập vào: 15

Kết quả in ra: 16

Giải thích: Hình chữ nhật tìm được có kích thước 4 x 4

Bạn xem bài này có lời giait tốt hơn không? mình giải chưa được tốt lắm.

Mình cũng chả chắc là thuật toán chuẩn,

var n,t,a,b:longint;
begin
repeat
write('n=');
readln(n);
until (1<=n)and(n<=1000000000);
a:=trunc(sqrt(n))+1;
b:=a;
if a*b>=n+a then a:=a-1;
t:=(a+b)*2;
           writeln(a,'   ',b);
        writeln(t);
readln;
end.


#19 nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết
  • Giới tính:Nam
  • Đến từ:đâu?
  • Sở thích:code, code, code and code!

Đã gửi 21-07-2014 - 13:11

bài 1 đấy bạn a`. Nhưng chạy turbo thì ok, còn bài 5 thì mất 4 test nếu đi thi mất 1 điểm hì

Bài 5 bạn qua freepascal khai int64 chạy ,ở dưới chỉnh lại khoảng từ 8>200 thì chạy thêm 3 text nữa:v

Bài 1:

var d:int64;  I:LONGINT;
function dx(n:int64):boolean;
        var s:string;      t:integer;
        begin
        str(n,S);
        dx:=true;
        for t:=1 to length(s) div 2 do
                if s[t]<>s[length(s)-t+1] then
                        begin
                        dx:=false;
                        break;
                        end;
        end;
begin
d:=0;
for i:=101 to 46999 do
        if dx(i)=true then
                if dx(sqr(i))=true then
                      begin
                 d:=d+1;
                 writeln(i,'   ',sqr(i));
                      end;
                        writeln(d);
                        readln;
                end. 
CHẠY TRÊN FREEPASCAL


#20 hocpascal

hocpascal

    Trung sĩ

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

Đã gửi 21-07-2014 - 14:56

 

Bài 5 bạn qua freepascal khai int64 chạy ,ở dưới chỉnh lại khoảng từ 8>200 thì chạy thêm 3 text nữa:v

Bài 1:

var d:int64;  I:LONGINT;
function dx(n:int64):boolean;
        var s:string;      t:integer;
        begin
        str(n,S);
        dx:=true;
        for t:=1 to length(s) div 2 do
                if s[t]<>s[length(s)-t+1] then
                        begin
                        dx:=false;
                        break;
                        end;
        end;
begin
d:=0;
for i:=101 to 46999 do
        if dx(i)=true then
                if dx(sqr(i))=true then
                      begin
                 d:=d+1;
                 writeln(i,'   ',sqr(i));
                      end;
                        writeln(d);
                        readln;
                end. 
CHẠY TRÊN FREEPASCAL

 

vậy là hàm Function dx(n:int64) khi nhận giá trị i*i mới đủ bộ nhớ hả bạn?







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

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