- Ebook Giải thuật và lập trình Lê Minh Hoàng
- Các thuật toán sắp xếp trong Pascal

In ra tệp các phần tử xuất hiện trong tệp từ k lần trở lên



Nhập một dãy A (mỗi số chỉ xuất 1 lần) có N (< 40) số tự nhiên và 1 số K. Hãy xuất ra các phần tử có số lần xuất hiện trong dãy A từ K lần trở lên.
Dữ liệu nhập: file DAYSO.INP:
- Dòng 1: 2 số n và k cách nhau bởi 1 dấu cách.
- Dòng 2: dãy A.
Dữ liệu ra: file DAYSO.OUT: Xuất các số thỏa điều kiện trên.


uses crt;
var a,b:array[0..100] of integer;
    n,j,i,k:integer;
    f:text;

Procedure docf;
 begin
  assign(f,'C:\DAYSO.INP');
  reset(f);
  i:=0;
     read(f,n);
     readln(f,k);
     While not eof(f) do
      begin
        inc(i);
        read(f,a[i]);
      end;
      close(f);
  end;

Procedure xuly;
 begin
 assign(f,'C:\DAYSO.OUT');
 rewrite(f);
 FillChar(b,SizeOf(b),0);
   For i:=1 to n do inc(b[a[i]]);
   For i:=1 to n do
        if (b[i]<>0) (b[i]>=k) then
           write(f,i,' ');
  close(f);
end;

BEGIN
 clrscr;
 docf;
 xuly;
 readln 
end.

Chú thích: 
- Hàm Fillchar(x,sizeof(x),i): điền lần lượt các byte của dữ liệu này bằng giá trị byte của i (i được coi là chiếm một byte).
Như vậy, đối với mảng kiểu integer hay longint (cả số cũng vậy), máy sẽ điền lần lượt các byte của dữ liệu:
Fillchar 1=00000001 (1 byte= 8 bit -> phải có đủ 8 chữ số cả 0 và 1).
- Sizeof(x): Trả về kích thước của biến trong bộ nhớ.



Nặc danh nói...

giải thích hộ em đoạn này cách nó hoạt động ntn?
For i:=1 to n do inc(b[a[i]]);
For i:=1 to n do
if (b[i]<>0) (b[i]>=k) then
write(f,i,' ');


lúc 21:14 2 tháng 4, 2016
Unknown nói...

Mảng b là mảng đánh dấu số lần đó bạn. Vì dụ mảng a số 2 xuất hiện k lần thì cứ đến số 2 nghĩa là b[2] thì nó lại tăng b2 lên 1 đến khi đủ k lần thì n write 2 ra


lúc 15:45 19 tháng 4, 2016
Unknown nói...

Đoạn in ra : For i:=1 to n do => SAII


lúc 22:19 22 tháng 4, 2016
Unknown nói...

cái này sai rồi for i:=1 to max(n) ms đúng


lúc 20:19 6 tháng 4, 2017
Unknown nói...

Anh em coi cái này ms đúng

program baitap276;
var f,g:text;
n,k:longint;
a,b:array[1..100000] of longint;

function max(m:longint):longint;
var i:longint;
begin
max:=low(longint);
for i:=1 to m do
if a[i]>max then max:=a[i];
end;


procedure xl;
var i:longint;
begin
assign(f,'baitap001.inp'); reset(f);
assign(g,'baitap001.out'); rewrite(g);
readln(f,n,k);
for i:=1 to n do
begin
read(f,a[i]);
inc(b[a[i]]);
end;
for i:=1 to max(n) do
if b[i]>=k then write(g,i,' ');
close(f);
close(g);
end;
begin
xl;
end.

//Hacker CM


lúc 20:20 6 tháng 4, 2017
Nặc danh nói...

Đọc đề mình không hiểu ở chỗ mỗi số chỉ xuất hiện 1 lần thi Tại sao lại đi tìm phần tử xuất hiện k lần ? Ai giải thích dùm mình được k?


lúc 16:13 25 tháng 3, 2018
Unknown nói...

cách này có đc ko ạ
var n,i,d,k:longint;
fi,fo:text;
s,x:string;
a:array[1..100] of longint;
begin
assign(fi,'dayso.inp');
reset(fi);
assign(fo,'dayso.out');
rewrite(fo);
readln(fi,n);
while n<40 do
begin

for i:=1 to n do read(fi,a[i]);
readln(fi,k);
for i:=1 to n do
begin
str(a[i],x);
s:=s+x;
end;
while length(s)>1 do
begin
d:=0;
x:=s[1];
while pos(x,s)>0 do
begin
d:=d+1;
delete(s,pos(x,s),1);
end;
if d>=k then writeln(fo,x);
end;
break;
end;
if n>=40 then write(fo,'Nhap n<40 ');

close(fi);
close(fo);
end.


lúc 13:15 17 tháng 11, 2018
Unknown nói...

Các bạn có thể cho minh biết mình viết doạn chương trình này sai chỗ nào?
Bài 1: Số lượng số Fibonaci – CFIBO.* (6 điểm)
"Một đôi thỏ (gồm một thỏ đực và một thỏ cái) cứ mỗi tháng đẻ được một đôi thỏ con
(cũng gồm một thỏ đực và thỏ cái); một đôi thỏ con, khi tròn 2 tháng tuổi, sau mỗi tháng đẻ
ra một đôi thỏ con, và quá trình sinh cứ thế tiếp diễn. Hỏi n tháng có bao nhiêu đôi thỏ, nếu
đầu năm có một đôi thỏ sơ sinh? Đó là câu chuyện vui về số Fibonaci, số này được định nghĩa
như sau:
- f(0) = 0.
- f(2) = f(1) = 1.
- f(n)= f(n-1) +f(n-2) với n > 2.
Yêu cầu: Cho hai số nguyên dương A và B, Tính số lượng số Fibonaci có giá trị trong
đoạn [A..B].
Dữ liệu vào: từ tập tin văn bản CFIBO.INP gồm hai số nguyên dương A và B cách
nhau ít nhất một khoảng trắng (0 ≤ A ≤ B ≤ 2*1010).
Kết quả: ghi ra tập tin văn bản CFIBO.OUT một số nguyên duy nhất là số lượng số
Fibonaci có giá trị trong đoạn [A..B].

CFIBO.INP CFIBO.OUT
2 10 4

Giải thích: Các 4 số Fibonaci f(3)=2, f(4)=3, f(5)=5 và f(6)=8 thỏa.
Đây là bài làm của mình:
program bt;
uses crt;
var i,d,a,b:integer;
c:array[0..100]of integer;
t,f:text;
begin
clrscr;
assign(t,'cfibo.inp');reset(t);
assign(f,'cfibo.out');rewrite(f);
read(t,a,b);
d:=0;
c[0]:=0;
c[1]:=1;
for i:=2 to b do c[i]:=c[i-1]+c[i-2] ;

for i:=1 to b do if (c[i]>=a) and (c[i]<=b) then inc(d);
write(d);
readln
end.


lúc 21:13 16 tháng 6, 2019

Đăng nhận xét

Thành viên Blog

Tổng số lượt xem trang

Translate

Return to top of page Copyright © 2012 | Theme by Hack Tutors. Cung cấp bởi Blogger.
Các code pascal trong blog được sưu tầm, lựa chọn sao cho tối ưu nhất. Cảm ơn các tác giả đã viết thuật toán.