Đề thi HSG lớp 11
Chia sẻ bởi Trần Quang Diệu |
Ngày 26/04/2019 |
48
Chia sẻ tài liệu: Đề thi HSG lớp 11 thuộc Tin học 11
Nội dung tài liệu:
Câu 1: Lập trình tìm tất cả các hoán vị của 1..n, sao cho hoán vị sau lớn hơn hoán vị trước. Ghi các hoán vị đó ra một file
Câu 2: Lập trình tìm các số có N chữ số, các chữ số nằm trong khoảng từ 1..M (M=1..9) và các chữ số có thể giống nhau, sao cho không có hai đoạn con liên tiếp nào trong số đó là giống nhau. Ghi các số tìm được ra một file
Đáp án câu 1:
uses crt;
var n: byte;
procedure Hoanvi(fn:string;n1:integer);
var f: text;
s: array[1..9] of byte;
i,j:integer;
x:byte;
d:longint;
begin
assign(f,fn); rewrite(f); d:=1;
for i:=1 to n1 do
s[i]:=i;
for i:=1 to n1 do
begin
write(f,s[i]);
if i=n1 then write(f,` `);
end;
d:=1;
repeat
i:=n;
while (i>1) and (s[i] if i=1 then
begin
writeln;
close(f);
exit;
end;
dec(i);
j:=n;
while (s[j] x:=s[i];s[i]:=s[j]; s[j]:=x;
inc(i);
for j:=i to i+(n-i-1) div 2 do
begin
x:=s[j];s[j]:=s[n+i-j];
s[n+i-j]:=x;
end;
for i:=1 to n1 do
begin
write(f,s[i]);
if i=n1 then
write(f,` `);
end;
inc(d);
if d mod 10=0 then writeln(f);
until false;
end;
procedure Nhap;
begin
repeat
Clrscr;
write(`Nhap vao n:`);readln(n);
until (n>=1) And (n<=9);
Hoanvi(`hoanvi`,n);
end;
begin
Nhap;
end.
Âaïp aïn cáu 2:
uses crt;
const gn=`out.out`;
var v:array[1..100] of byte;
n,m:integer;
g:text;
function a(i,k:integer):boolean;
var j:integer;
begin
a:=false;
for j:=0 to k-1 do
if v[i-j]<>v[i-k-j] then exit;
a:=true;
end;
function b(i:integer):boolean;
var k:integer;
begin
b:=false;
for k:=1 to i div 2 do
if a(i,k) then exit;
b:=true;
end;
function c(i:integer):boolean;
begin
c:=true;
while v[i] begin
inc(v[i]);
if b(i) then exit;
end;
c:=false;
end;
procedure kq(d:integer);
var i:integer;
begin
if d=0 then write(g,`vo nghiem`)
else
begin
write(g,`nghiem thu d `,d,` :`);
for i:=1 to n do write(g,v[i]);
writeln(g);
end;
end;
procedure timso(len:integer;lim:integer);
var i: integer;
d:longint;
begin
for i:=1 to n do v[i]:=0;
assign(g,gn); rewrite(g);
i:=1; d:=0;
Câu 2: Lập trình tìm các số có N chữ số, các chữ số nằm trong khoảng từ 1..M (M=1..9) và các chữ số có thể giống nhau, sao cho không có hai đoạn con liên tiếp nào trong số đó là giống nhau. Ghi các số tìm được ra một file
Đáp án câu 1:
uses crt;
var n: byte;
procedure Hoanvi(fn:string;n1:integer);
var f: text;
s: array[1..9] of byte;
i,j:integer;
x:byte;
d:longint;
begin
assign(f,fn); rewrite(f); d:=1;
for i:=1 to n1 do
s[i]:=i;
for i:=1 to n1 do
begin
write(f,s[i]);
if i=n1 then write(f,` `);
end;
d:=1;
repeat
i:=n;
while (i>1) and (s[i]
begin
writeln;
close(f);
exit;
end;
dec(i);
j:=n;
while (s[j]
inc(i);
for j:=i to i+(n-i-1) div 2 do
begin
x:=s[j];s[j]:=s[n+i-j];
s[n+i-j]:=x;
end;
for i:=1 to n1 do
begin
write(f,s[i]);
if i=n1 then
write(f,` `);
end;
inc(d);
if d mod 10=0 then writeln(f);
until false;
end;
procedure Nhap;
begin
repeat
Clrscr;
write(`Nhap vao n:`);readln(n);
until (n>=1) And (n<=9);
Hoanvi(`hoanvi`,n);
end;
begin
Nhap;
end.
Âaïp aïn cáu 2:
uses crt;
const gn=`out.out`;
var v:array[1..100] of byte;
n,m:integer;
g:text;
function a(i,k:integer):boolean;
var j:integer;
begin
a:=false;
for j:=0 to k-1 do
if v[i-j]<>v[i-k-j] then exit;
a:=true;
end;
function b(i:integer):boolean;
var k:integer;
begin
b:=false;
for k:=1 to i div 2 do
if a(i,k) then exit;
b:=true;
end;
function c(i:integer):boolean;
begin
c:=true;
while v[i]
inc(v[i]);
if b(i) then exit;
end;
c:=false;
end;
procedure kq(d:integer);
var i:integer;
begin
if d=0 then write(g,`vo nghiem`)
else
begin
write(g,`nghiem thu d `,d,` :`);
for i:=1 to n do write(g,v[i]);
writeln(g);
end;
end;
procedure timso(len:integer;lim:integer);
var i: integer;
d:longint;
begin
for i:=1 to n do v[i]:=0;
assign(g,gn); rewrite(g);
i:=1; d:=0;
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Trần Quang Diệu
Dung lượng: |
Lượt tài: 0
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)