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ế[r]
(1)Câu 1: Lập trình tìm tất các hoán vị n, cho hoán vị sau lớn hoán vị trước Ghi các hoán vị đó file Câu 2: Lập trình tìm các số có N chữ số, các chữ số nằm khoảng từ M (M=1 9) và các chữ số có thể giống nhau, cho không có hai đoạn liên tiếp nào số đó là giống Ghi các số tìm 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 s[i]:=i; for i:=1 to n1 begin write(f,s[i]); if i=n1 thenwrite(f,' '); end; d:=1; repeat i:=n; while (i>1) and (s[i]<s[i-1]) dec(i); if i=1 then begin writeln; close(f); exit; end; dec(i); j:=n; while (s[j]<s[i]) dec(j); x:=s[i];s[i]:=s[j]; s[j]:=x; inc(i); for j:=i to i+(n-i-1) div begin x:=s[j];s[j]:=s[n+i-j]; s[n+i-j]:=x; end; for i:=1 to n1 begin write(f,s[i]); if i=n1 then write(f,' '); end; (2) 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 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 if a(i,k) then exit; b:=true; end; function c(i:integer):boolean; begin c:=true; while v[i]<m begin inc(v[i]); if b(i) then exit; end; c:=false; end; procedure kq(d:integer); (3) 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 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 v[i]:=0; assign(g,gn); rewrite(g); i:=1; d:=0; repeat if i>n then begin inc(d); kq(d); i:=n; end; if i<1 then begin if d=0 then kq(0); close(g); write('OK'); readln; exit; end; if c(i) then inc(i) else begin v[i]:=0; dec(i); end; until false; end; begin clrscr; write('nhap n,m :'); readln(n,m); timso(n,m); end (4)