tin pascal

ontinhoc

Học sinh chăm học
Thành viên
27 Tháng hai 2017
26
12
71
21
Sóc Trăng
[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Giúp em bài này với các anh:):):)

Giả thiết có N hộp được đặt tên A1,A2,....,AN (3<=N<=200). Mỗi hộp được khóa bởi một khóa riêng. Người ta bỏ vào mỗi hộp một chìa khóa và khóa các hộp từ A3 cho đến AN. sau đó mở hai hộp A1 và A2 lấy các chìa khóa ra. Nếu những chìa khóa này mở được một số hộp nào đó, người ta sẽ lấy các chìa khóa ra từ đó và mở tiếp các hộp khác. Nếu cuối cùng người ta mở được hết các hộp, thì các chìa khóa gọi là bố trí tốt.
vct pascal tìm xem có bao nhiêu cách bố trí tốt các chìa khóa?
vd: N=6 có 240 cách bố trí tốt!

cảm ơn trước ạ!!!:r10
 

Hz♥Trum♥Hz

Học sinh mới
Thành viên
21 Tháng sáu 2017
49
42
11
Giúp em bài này với các anh:):):)

Giả thiết có N hộp được đặt tên A1,A2,....,AN (3<=N<=200). Mỗi hộp được khóa bởi một khóa riêng. Người ta bỏ vào mỗi hộp một chìa khóa và khóa các hộp từ A3 cho đến AN. sau đó mở hai hộp A1 và A2 lấy các chìa khóa ra. Nếu những chìa khóa này mở được một số hộp nào đó, người ta sẽ lấy các chìa khóa ra từ đó và mở tiếp các hộp khác. Nếu cuối cùng người ta mở được hết các hộp, thì các chìa khóa gọi là bố trí tốt.
vct pascal tìm xem có bao nhiêu cách bố trí tốt các chìa khóa?
vd: N=6 có 240 cách bố trí tốt!

cảm ơn trước ạ!!!:r10
Dùng C++ để minh hoạ vì có sẵn STL hơn:

int arr[n + 1];// đánh số từ 0

arr[n] = số integer nhỏ nhất;

int res[n];

int cnt = 0;

sort(arr, arr + n) // sort dãy theo thứ tự tăng dần

for (int i = 0; i < n; i++) { // đánh số từ 0

if (arr != arr[i + 1]){

res[cnt] = arr;

cnt++;

}

if (cnt == 0){

cout << 1 << endl; // output kết quả

cout << arr[n];

} else {

cout << cnt << endl;

for(int i = 0; i < cnt; ++i) cout << res << " ";

}

}

Cách dùng set:

int n;

cin >> n;

int in;

set<int> s;

for(int i = 0; i < n; ++i){

cin >> in;

s.insert(s);

}

// s.size() và cách số trong s là kết quả.

Cách dùng hash table, tương tự cách dùng set
P/s:Hãy like cho @Jotaro Kujo
 

ontinhoc

Học sinh chăm học
Thành viên
27 Tháng hai 2017
26
12
71
21
Sóc Trăng
Dùng C++ để minh hoạ vì có sẵn STL hơn:

int arr[n + 1];// đánh số từ 0

arr[n] = số integer nhỏ nhất;

int res[n];

int cnt = 0;

sort(arr, arr + n) // sort dãy theo thứ tự tăng dần

for (int i = 0; i < n; i++) { // đánh số từ 0

if (arr != arr[i + 1]){

res[cnt] = arr;

cnt++;

}

if (cnt == 0){

cout << 1 << endl; // output kết quả

cout << arr[n];

} else {

cout << cnt << endl;

for(int i = 0; i < cnt; ++i) cout << res << " ";

}

}

Cách dùng set:

int n;

cin >> n;

int in;

set<int> s;

for(int i = 0; i < n; ++i){

cin >> in;

s.insert(s);

}

// s.size() và cách số trong s là kết quả.

Cách dùng hash table, tương tự cách dùng set
P/s:Hãy like cho @Jotaro Kujo
em học pascal anh ơi, anh viết C++ em không hiểu đâu anh, anh có thể chỉ cho em thuật toán được không?c29
 

Hz♥Trum♥Hz

Học sinh mới
Thành viên
21 Tháng sáu 2017
49
42
11
em học pascal anh ơi, anh viết C++ em không hiểu đâu anh, anh có thể chỉ cho em thuật toán được không?c29
var s:string; i,j:integer;
begin
write('s=');
readln(s);
while s[1]='0' do delete(s,1,1);
for i:=1 to length(s) do
if s in['0'..'9'] then j:=j+1;
if j<length(s) then exit;
for i:=1 to length(s) div 2 do
if s>s[length(s)-i+1] then s[length(s)-i+1]:=s
else if s<s[length(s)-i+1] then
begin
s:=chr(ord(s)+1);
s[length(s)-i+1]:=s;
for j:=i+1 to length(s)-i do
s[j]:='0';
end;
writeln(s);
readln;
end.
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,623
744
22
Phú Yên
Trường THPT Lương Văn Chánh
var s:string; i,j:integer;
begin
write('s=');
readln(s);
while s[1]='0' do delete(s,1,1);
for i:=1 to length(s) do
if s in['0'..'9'] then j:=j+1;
if j<length(s) then exit;
for i:=1 to length(s) div 2 do
if s>s[length(s)-i+1] then s[length(s)-i+1]:=s
else if s<s[length(s)-i+1] then
begin
s:=chr(ord(s)+1);
s[length(s)-i+1]:=s;
for j:=i+1 to length(s)-i do
s[j]:='0';
end;
writeln(s);
readln;
end.
Bạn có thể nói rõ hơn về thuật toán giải bài này được không.
 

Hz♥Trum♥Hz

Học sinh mới
Thành viên
21 Tháng sáu 2017
49
42
11
Bạn có thể nói rõ hơn về thuật toán giải bài này được không.
uses crt;

var a,b,i,j,max:word;

nt,uocnt:boolean;



begin

clrscr;

write('Nhap a, b:'); readln(a,b);

if a>=b then max:=a else max:=b;

for i:=2 to max div 2 do

begin

nt:=true;

for j:=2 to trunc(sqrt(i)) do {kt cac snt}

if i mod j = 0 then

begin

nt:=false;

break;

end;

if nt then {kt cac snt do co phai la uoc cua a,b khong}

begin

uocnt:=true;

if ((a mod i = 0)and(b mod i<>0)) or ((a mod i<>0)and(b mod i=0))

then uocnt:=false;

if not uocnt then break;

end;

end;

if uocnt then write('La snt tuong duong')

else write('Khong phai snt tuong duong');

readln

end.
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,623
744
22
Phú Yên
Trường THPT Lương Văn Chánh
uses crt;

var a,b,i,j,max:word;

nt,uocnt:boolean;



begin

clrscr;

write('Nhap a, b:'); readln(a,b);

if a>=b then max:=a else max:=b;

for i:=2 to max div 2 do

begin

nt:=true;

for j:=2 to trunc(sqrt(i)) do {kt cac snt}

if i mod j = 0 then

begin

nt:=false;

break;

end;

if nt then {kt cac snt do co phai la uoc cua a,b khong}

begin

uocnt:=true;

if ((a mod i = 0)and(b mod i<>0)) or ((a mod i<>0)and(b mod i=0))

then uocnt:=false;

if not uocnt then break;

end;

end;

if uocnt then write('La snt tuong duong')

else write('Khong phai snt tuong duong');

readln

end.
Ý mình là bạn có thể nói cách thức để giải bài toán không. Vì mình không giỏi trong các bài toán tìm số lần như vậy
 

ontinhoc

Học sinh chăm học
Thành viên
27 Tháng hai 2017
26
12
71
21
Sóc Trăng
var s:string; i,j:integer;
begin
write('s=');
readln(s);
while s[1]='0' do delete(s,1,1);
for i:=1 to length(s) do
if s in['0'..'9'] then j:=j+1;
if j<length(s) then exit;
for i:=1 to length(s) div 2 do
if s>s[length(s)-i+1] then s[length(s)-i+1]:=s
else if s<s[length(s)-i+1] then
begin
s:=chr(ord(s)+1);
s[length(s)-i+1]:=s;
for j:=i+1 to length(s)-i do
s[j]:='0';
end;
writeln(s);
readln;
end.
anh chỉ cho em cái thuật toán được không ạ, tại sao anh lại làm xâu S, em hỏi về số N mà???o_Oo_O
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,623
744
22
Phú Yên
Trường THPT Lương Văn Chánh
anh chỉ cho em cái thuật toán được không ạ, tại sao anh lại làm xâu S, em hỏi về số N mà???o_Oo_O
Đây chỉ là một đoạn Code mình kiếm được ở trên mạng. Mình cũng không hiểu thuật toán của nó lắm:

uses crt;
const
fi='botri.txt';
fo='botri.txt';
var
f:text;
i,n,t: longint;
procedure inp;
begin
write('Nhap so hop(3 <= N <= 20): ');{ Vi 200 la qua lon }
readln(n);
end;
procedure out;
begin
t:=1;
for i:=n-1 downto 1 do
t:=t*i;
t:=t*2;
write('So cach bo tri tot: ',t);
readln;
end;
BEGIN
clrscr;
INP;
OUT;
END.
 
  • Like
Reactions: ontinhoc

ontinhoc

Học sinh chăm học
Thành viên
27 Tháng hai 2017
26
12
71
21
Sóc Trăng
Đây chỉ là một đoạn Code mình kiếm được ở trên mạng. Mình cũng không hiểu thuật toán của nó lắm:

uses crt;
const
fi='botri.txt';
fo='botri.txt';
var
f:text;
i,n,t: longint;
procedure inp;
begin
write('Nhap so hop(3 <= N <= 20): ');{ Vi 200 la qua lon }
readln(n);
end;
procedure out;
begin
t:=1;
for i:=n-1 downto 1 do
t:=t*i;
t:=t*2;
write('So cach bo tri tot: ',t);
readln;
end;
BEGIN
clrscr;
INP;
OUT;
END.
ừm, mình cũng coi code này rồi nhưng không hiểu tại sao lại có t:=t*i và t:=t*2 nữa!!
 

trà nguyễn hữu nghĩa

Cựu Mod Vật Lí |Cây bút Thơ|Thần tượng VH
Thành viên
14 Tháng năm 2017
3,974
7,623
744
22
Phú Yên
Trường THPT Lương Văn Chánh
ừm, mình cũng coi code này rồi nhưng không hiểu tại sao lại có t:=t*i và t:=t*2 nữa!!
Theo mình nghĩ t*i là để tìm số cách bố trí tốt từ chìa khóa thứ nhất. Sau đó ta lại làm tiếp tục với chìa khóa thứ 2 nên có t*2.
 
Top Bottom