Đến nội dung

cuongtk2002

cuongtk2002

Đăng ký: 07-07-2017
Offline Đăng nhập: 26-03-2019 - 02:19
-----

Trong chủ đề: pascal: in ra các hoán vị

26-03-2019 - 02:21

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#include<iostream>
#define FOR(i, a, b) for(int i=a; i<=b; i++)
using namespace std;

bool b[10];
int a[10];
int n, i, j;

void printf(){
	FOR(i, 1, n) cout<<a[i]; cout<<endl;
}
void f(int u){
	if (u==n+1){
		printf(); return;
	}
	
	FOR(i, 1, n)
		if (!b[i]){
			b[i]=true;
				a[u]=i;
				f(u+1);
			b[i]=false;
		}
}
int main(){
	cin>> n;
	f(1);
}

Trong chủ đề: pascal: in ra các hoán vị

07-07-2017 - 17:48

{Đề nhập n in ra các hoán vị từ 1 đến n đúng ko??  :huh:
  vd: n=3    >>   1 2 3, 132, 213, 231, 312, 321   }  
 *Lưu ý:* ae nhập n<=8 thôi chứ nó tỉ tỉ tường hợp thì chạy nát máy (n>8 chắc đc nhưng nó chạy thì lâu lắm)   
THUẬT TOÁN TỰ LÀM !  (mời ae xem)
:) 
var a:array[0..1000000] of string;
    s,x:string;
    i,j,k,n:longint;
    bl,kq:boolean;
    tam:char;
begin
readln(n);
s:='';
for i:=1 to n do begin str(i,x); s:=s+x; end;
k:=1; a[k]:=s;
 kq:=true;
 while kq=true do
 begin
 kq:=false;
 for i:=2 to length(s) do
  begin
  bl:=true;
  tam:=s[1];
  s[1]:=s[i];
  s[i]:=tam;
  for j:=1 to k do if s=a[j] then bl:=false;
  if bl=true then begin
                  inc(k); a[k]:=s; kq:=true; end
  else s:=a[k];
 end;
 end;
 for i:=1 to k do write(a[i],' ');
readln
end.
P/s: có j sai sót ae báo nhá !