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

#141
hocpascal

hocpascal

    Trung sĩ

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

bạn Nghethuan ơi xem hộ bài này cái nha!

Có N ngôi làng, đánh số từ 1 đến N, được nối với nhau bởi các tuyến đường nối trực tiếp giữa hai làng sao cho từ một làng bất kì có thể đi đến một làng bất kì khác bằng con đường này. Hãy chọn ra một làng để đặt trạm bưu điện sao cho quãng đường xa nhất từ làng khác đến nó là nhỏ nhất
---Dữ liệu vào: Vào từ file POST.INP
- Dòng 1: Ghi N là số ngôi làng (n<=100)
- Tiếp theo là một số dòng, mỗi dòng ghi 3 số nguyên dương u,v,w,thể hiện có một con đường (hai chiều) nối làng u và làng v với độ dài w (lưu ý rằng giữa 2 làng có thể có nhiều hơn một đường đi trực tiếp). Các số trên một dòng được ghi cách nhau ít nhất một dấu cách.
---Kết quả: Ghi ra file văn bản POST.OUT, gồm 2 dòng
- Dòng 1: ghi số hiệu ngôi làng sẽ đặt trạm bưu điện
- Dòng 2: ghi độ dài đoạn đường xa nhất từ một làng đến bưu điện, trong phương án tối ưu.
Ví dụ:
---------POST.INP-------------POST.OUT
----------3--------------------2
----------1 2 3----------------3
----------2 3 1
----------1 3 8

// mình ý này

đọc dữ liệu tương ứng cho x,y,z (z là khoảng cách)

tìm max(z)=> ngôi làng có khoảng cách xa nhất 

tìm khoảng cách min từ các làng khác tới làng vừa tìm được và đạt chốt tại đó

bạn xem có lời giải hay không nha



#142
nghethuat102

nghethuat102

    Trung sĩ

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

 nghĩ không ra noi!



#143
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết
minh code the này có được không bạn nhi?
Var A:array[1..100] of longint;
    n:byte;
Procedure DocFile;
var f:text;
    x,y:byte;
    z:integer;
Begin
     assign(f,'c:/BD.inp'); reset(f);
     readln(f,N);
     While not Eof(f) do
         Begin
              readln(f,x,y,z);
              A[x]:=A[x]+z;
              A[y]:=A[y]+z;
         End;
     close(f);
End;
 
Procedure XuLy;
var f:text;
    min,i:byte;
    Begin
         min:=1;
         for i:=1 to n do
             if A[i]<A[min] then Min:=i;
         assign(f,'c:/bd.OUT'); rewrite(f);
         writeln(f,min);
         write(f,A[min]);
         close(f);
    End;
Begin
     DocFile;
     XuLy;
 end.


#144
hocpascal

hocpascal

    Trung sĩ

  • Thành viên
  • 109 Bài viết
Bạn có cách nào làm bài này dễ hiểu không nha

     Gom bi:  Có N cái hộp đánh số từ 1 tới N và N viên bi cũng đánh số từ 1 tới N. Ban đầu bi số i đặt trong hộp đánh số i (i = 1..N). Với một cặp số nguyên (u, v) cho trước, bạn phải thực hiện thao tác chuyển tất cả các bi cùng hộp với bi có số u vào hộp chứa bi số v.

Yêu cầu: Cho số N và danh sách M thao tác cần phải thực hiện. Hãy xác định số lượng bi lớn nhất trong một hộp sau khi đã thực hiện đủ M thao tác chuyển bi.

Dữ liệu: Cho trong file GOMBI.INP

  • Dòng 1 là hai số N, M (2 ≤ N ≤ 500; 1 ≤ M ≤ 1000).
  • M dòng tiếp theo, mỗi dòng chứa hai số nguyên u v thể hiện một thao tác cần thực hiện

Kết quả: Ghi ra file GOMBI.OUT một số nguyên là số lượng bi trong hộp có nhiều bi nhất sau khi thực hiện các thao tác.

Ví dụ:

GOMBI.INP

GOMBI.OUT

Giải thích: Các hộp có bi sau mỗi lần chuyển.

7 4

1 3

2 6

1 6

1 2

4

Ban đầu:        (1) (2) (3) (4) (5) (6) (7)

Chuyển 1 3:   (2) (1 3) (4) (5) (6) (7)

Chuyển 2 6:   (1 3) (4) (5) (2 6) (7)

Chuyển 1 6:   (4) (5) (1 2 3 6) (7)

Chuyển 1 2:   (4) (5) (1 2 3 6) (7)

 


#145
hocpascal

hocpascal

    Trung sĩ

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

Xem hộ tớ bài này nha 

Cho số nguyên dương N (n<=30000). Hãy xác định số nguyên dương m là bội nhỏ nhất của N sao cho biểu diễn của m trong hệ thập phân chỉ chứa các số 0 và 1

Ví dụ: N=25 thì m=100

code này không chạy được số lớn 

nếu viết bằng cộng xâu thì không được hay! liệu có quy luật nào không bạn nhỉ?

var m,n,t:int64;tam:string;

function ktra(s:string):boolean;
var i: integer; kt:boolean;
begin
i:=1; while (i<=length(s)) and (s[i] in ['0'..'1']) do inc(i);
if i>length(s) then
ktra:=true
else ktra:=false;
end;
 
begin
read(n);
t:=0;
repeat
t:=t+n;
str(t,tam);
until ktra(tam);
write(tam);
readln;
readln
end.


#146
nghethuat102

nghethuat102

    Trung sĩ

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


 

Xem hộ tớ bài này nha 

Cho số nguyên dương N (n<=30000). Hãy xác định số nguyên dương m là bội nhỏ nhất của N sao cho biểu diễn của m trong hệ thập phân chỉ chứa các số 0 và 1

Ví dụ: N=25 thì m=100

code này không chạy được số lớn 

nếu viết bằng cộng xâu thì không được hay! liệu có quy luật nào không bạn nhỉ?

var m,n,t:int64;tam:string;

function ktra(s:string):boolean;
var i: integer; kt:boolean;
begin
i:=1; while (i<=length(s)) and (s[i] in ['0'..'1']) do inc(i);
if i>length(s) then
ktra:=true
else ktra:=false;
end;
 
begin
read(n);
t:=0;
repeat
t:=t+n;
str(t,tam);
until ktra(tam);
write(tam);
readln;
readln
end.

 

Mình tìm k ra quy luật !



#147
nghethuat102

nghethuat102

    Trung sĩ

  • Thành viên
  • 147 Bài viết
var a:array[1..1000,1..2] of 0..500;
    b:array[1..1000] of boolean;
    c:array[1..2000] of 0..500;
    i,n,m,max,d,e,j,j1:integer;
    f,g:text;
   procedure thu(k,t:integer);
    var j:integer;
    begin
     for i:=1 to m do
      if b[i]=true then
       if (a[i,1]=k)or(a[i,1]=t)or(a[i,2]=k)or(a[i,2]=t) then
        begin
        b[i]:=false;
        d:=d+2;
        c[d-1]:=a[i,1];
        c[d]:=a[i,2];
        thu(a[i,1],a[i,2]);
        end;
    end;
begin
 assign(f,'gombi.inp');
 reset(f);
 assign(g,'gombi.out');
 rewrite(g);
 readln(f,n,m);
 for i:=1 to  m do
  begin
  b[i]:=true;
  readln(f,a[i,1],a[i,2]);
  end;
  max:=1;
 for i:=1 to m do
  if b[i]=true then
   begin
   d:=2;
   c[1]:=a[i,1];
   c[2]:=a[i,2];
   b[i]:=false;
   thu(a[i,1],a[i,2]);
   for j1:=1 to d-1 do
     for j:=j1+1 to d do
      if c[j1]>c[j] then
       begin
        e:=c[j1];
        c[j1]:=c[j];
        c[j]:=e;
       end;
   e:=1;
   for j:=2 to n do
    if c[j]<>c[j-1] then e:=e+1;
   if e>max then max:=e;
   end;
  writeln(g,max);
 close(f);
 close(g);
end.

bài gombi làm thế này k bik đúng k nữa ?/ l!


#148
hocpascal

hocpascal

    Trung sĩ

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

Ok! chương trinh đó cũng được lắm

Bạn xem bài này làm thế nào nha?

Hai người chơi trò chơi như sau:

- mỗi người lần lượt viết lên bảng một số tự nhiên

- Quy tắc đi là không viết số là ước số của các số đã ghi trên bảng và sdduwwocj viết phải <=n (n cho trước)

- người thắng cuộc là người đi được nước cuối cùng

Viết chương trình cho hai người chơi sau



#149
nghethuat102

nghethuat102

    Trung sĩ

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

Ok! chương trinh đó cũng được lắm

Bạn xem bài này làm thế nào nha?

Hai người chơi trò chơi như sau:

- mỗi người lần lượt viết lên bảng một số tự nhiên

- Quy tắc đi là không viết số là ước số của các số đã ghi trên bảng và sdduwwocj viết phải <=n (n cho trước)

- người thắng cuộc là người đi được nước cuối cùng

Viết chương trình cho hai người chơi sau

Cho vd dc k??



#150
hocpascal

hocpascal

    Trung sĩ

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

Bạn nè! bài này có thể làm được không?

viết chương trình ghép liên tiếp 50.000 số nguyên tố và in số vừa ghép ra màn hình



#151
nghethuat102

nghethuat102

    Trung sĩ

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

Bạn nè! bài này có thể làm được không?

viết chương trình ghép liên tiếp 50.000 số nguyên tố và in số vừa ghép ra màn hình

Hình như là đc mà, chỉ cần tìm ra 50.000 số nt đầu tiên thôi !



#152
hocpascal

hocpascal

    Trung sĩ

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

Pro giúp tôi thuật toán này với

Cho N số nguyên dương A1, A2, …, AN. Từ các số nguyên này, có thể tạo ra một

số nguyên mới bằng cách kết nối tất cả các số đã cho viết liên tiếp tiếp nhau.

Ví dụ:  với  N  = 3,  các  số 50, 9, 80  ta  có thể tạo  ra  các  số  mới như  sau: 50980,

50809, 95080, 98050, 80509, 80950. Có tất cả N! số được tạo ra. Trong trường hợp này, số lớn nhất là 98050.

Yêu cầu: cho N số nguyên dương A1, A2, …, AN. Hãy xác định số lớn nhất có thể

tạo thành theo nguyên tắc trên.

Dữ liệu vào từ tệp văn bản KETNOI.INP:

o Dòng đầu tiên chứa số nguyên N với 1 < N ≤ 106.

o Dòng thứ hai chứa N số nguyên A1, A2, …, AN với 0 < Ai < 100, 1 ≤ i ≤ N.

Hai số kề nhau cách nhau một khoảng trắng.

Dữ liệu ra ghi vào tệp văn bản KETNOI.OUT: Số lớn nhất có thể tạo ra từ dãy

số.

  KETNOI.INP

 3

 

50 9 80

KETNOI.OUT

98050



#153
hocpascal

hocpascal

    Trung sĩ

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

Code the nay có được không bạn

type mangxau=array[1..10000] of string;
var i,j,max,n: longint; a : mangxau;
 
procedure sx(var a:mangxau);
var i,j:integer; tam:string;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]<a[j] then
begin
tam:=a[i]; a[i]:=a[j]; a[j]:=tam;
end;
end;
function kt(var s1,s2:string):boolean;
var i:byte;tam:string;
begin
i:=1; while s1[i]=s2[i] do inc(i);
tam:=copy(s1,i,length(s1)-i+1);
if tam<>'' then
begin
if tam<=s2 then
kt:=true
else
kt:=false;
end;
end;
procedure dc(var s1,s2:string);
var tg:string;
begin
tg:=s1; s1:=s2; s2:=tg;
end;
begin
write('nhap n=: ');readln(n);
for i:=1 to n do
readln(a[i]);
sx(a);
write('day vua sap xep');
for i:=1 to n do
write(a[i],' ');
writeln;
write('cac pt doi cho');
for i:=1 to n-1 do
for j:=i+1 to n do
if kt(a[i],a[j]) then
begin
dc(a[i],a[j]);
writeln(a[i],'  ',a[j]);
end;
writeln(' day thu duoc');
for i:=1 to n do
write(a[i],' ');
//readln;
readln
end.


#154
duongyt1998

duongyt1998

    Lính mới

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

 

Chương trình monh code thế này nhưng có nhiều test không chạy được do kiểu dữ liệu

var a,b,n,k: int64;  i: integer;
kt:boolean;
begin
read(a,b);
n:=a;  kt:=false;
for i:=1 to 200 do
begin
n:=n*10;
if (n+b) mod 89=0 then
begin
kt:=true;
k:=(n+b) div 89;
break;
end;
end;
if kt then
write(k) else
write('-1');
readln;
readln
end.

 

thương thiếu số 0



#155
nghethuat102

nghethuat102

    Trung sĩ

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

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

Mình quên mất rồi, cái câu bạn nói mình cũng không hiểu cho lắm,



#156
duytoannguyenledh

duytoannguyenledh

    Lính mới

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

Ai giúp mình với

Cho một băng số gồm n số nguyên dương, mỗi số được viết trên một ô. Hãy cắt băng số này thành nhiều đoạn nhất sao cho tổng các phần tử trong các đoạn là bằng nhau.

Dữ liệu vào: DIV.INP  + Dòng đầu ghi n (n ≤ 1000)

+ Dòng tiếp theo ghi n số nguyên dương a1, a2, ..., an

(các số nằm trên một dòng cách nhau bởi một dấu cách ai  ≤ 1000)

Dữ liệu ra: DIV.OUT    Ghi K là số đoạn cần chia.

 

10

2

6

2

5

2

1

2

 

 

10

 

 

2

6

2

 

 

5

2

1

2

 

 

 

Ví dụ:

 

 

 

 

DIV.INP

DIV.OUT

Giải thích

8

10   2    6   2   5    2   1    2

3

 

Đoạn 1: 10

Đoạn 2: 2 + 6 + 2 =10

Đoạn 3: 5 + 2 + 1 + 2 = 10

Cho một băng số gồm n số nguyên dương, mỗi số được viết trên một ô. Hãy cắt băng số này thành nhiều đoạn nhất sao cho tổng các phần tử trong các đoạn là bằng nhau.

Dữ liệu vào: DIV.INP  + Dòng đầu ghi n (n ≤ 1000)

+ Dòng tiếp theo ghi n số nguyên dương a1, a2, ..., an

(các số nằm trên một dòng cách nhau bởi một dấu cách ai  ≤ 1000)

Dữ liệu ra: DIV.OUT    Ghi K là số đoạn cần chia.

 

10

2

6

2

5

2

1

2

 

 

10

 

 

2

6

2

 

 

5

2

1

2

 

 

 

Ví dụ:

 

 

 

 

DIV.INP

DIV.OUT

Giải thích

8

10   2    6   2   5    2   1    2

3

 

Đoạn 1: 10

Đoạn 2: 2 + 6 + 2 =10

Đoạn 3: 5 + 2 + 1 + 2 = 10

 


#157
nghethuat102

nghethuat102

    Trung sĩ

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

http://www.wattpad.c...chia-kẹo-và-ứng



#158
DrPlayBoy

DrPlayBoy

    Lính mới

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

Var n, m: longint;

    st, st1: string;

    fin, fou: text;

    A: Array [1..20] of string;

    i, j, k, z, code: integer;

    h: boolean;

BEGIN

Assign(fin,'F:/SUM.INP');

Reset(fin);

Readln(fin,n);

Str(n,st);

Begin

m:=0;

For i:=1 to length(st) do

 Begin

 k:=0;

 For j:=1 to length(st)-i+1 do

  Begin

  st1:=copy(st,j,i);

  If st1[1] <> '0' then

   Begin

   h:=true;

   For z:=1 to k do

    If st1 = A[z] then

     Begin

     h:=false;

     break;

     End;

   If h = true then

    Begin

    k:=k+1;

    A[k]:=st1;

    End;

   End;

  End;

 For j:=1 to k do

  Begin

  val(A[j],n,code);

  m:=m+n;

  End;

 End;

End;

Close(fin);

Assign(fou,'F:/SUM1.OUT');

Rewrite(fou);

Write(fou,m);

Close(fou);

Readln;

END.

 

 

p/s: Chỉ tính được 1 số trong tệp, ai biết làm thế nào tính các số còn lại thì post lên! ths :D



#159
DrPlayBoy

DrPlayBoy

    Lính mới

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

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

 

 

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

Var n, m: longint;

    st, st1: string;

    fin, fou: text;

    A: Array [1..20] of string;

    i, j, k, z, code: integer;

    h: boolean;

BEGIN

Assign(fin,'F:/SUM.INP');

Reset(fin);

Readln(fin,n);

Str(n,st);

Begin

m:=0;

For i:=1 to length(st) do

 Begin

 k:=0;

 For j:=1 to length(st)-i+1 do

  Begin

  st1:=copy(st,j,i);

  If st1[1] <> '0' then

   Begin

   h:=true;

   For z:=1 to k do

    If st1 = A[z] then

     Begin

     h:=false;

     break;

     End;

   If h = true then

    Begin

    k:=k+1;

    A[k]:=st1;

    End;

   End;

  End;

 For j:=1 to k do

  Begin

  val(A[j],n,code);

  m:=m+n;

  End;

 End;

End;

Close(fin);

Assign(fou,'F:/SUM1.OUT');

Rewrite(fou);

Write(fou,m);

Close(fou);

Readln;

END.

 

p/s: chỉ tính được 1 số trong tệp, ai bít tính các số còn lại thì post lên nha!



#160
thienmtp

thienmtp

    Lính mới

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

viết 1 ct nhập dãy số nguyên có n phần tử và 1 số nguyên x và kt xem có bao nhiêu số trong mảng có giá trị = x, chúng ở vị trí nào

 







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

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

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