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.
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
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).
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ớ.

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
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
Đoạn in ra : For i:=1 to n do => SAII
lúc 22:19 22 tháng 4, 2016
cái này sai rồi for i:=1 to max(n) ms đúng
lúc 20:19 6 tháng 4, 2017
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
Đọ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
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
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