Đến nội dung

Hình ảnh

pascal: in ra các hoán vị


  • Please log in to reply
Chủ đề này có 8 trả lời

#1
NGOCTIEN_A1_DQH

NGOCTIEN_A1_DQH

    Never Give Up

  • Thành viên
  • 625 Bài viết
viết chương trình nhập số nguyên dương $ N /leq 10 $ từ bàn phím, in ra màn hình tất cả các hoán vị của tập $ {1,2,...N} $
p/s: viết cả thuật toán nha mọi người
Em cắm hoa tươi đặt cạnh bàn

Mong rằng toán học bớt khô khan

Em ơi trong toán nhiều công thức

Cũng đẹp như hoa lại chẳng tàn

#2
perfectstrong

perfectstrong

    $LOVE(x)|_{x =\alpha}^\Omega=+\infty$

  • Quản lý Toán Ứng dụng
  • 4991 Bài viết
Code:
uses crt;
const maxn=10;
var a: array[1..maxn] of integer;
    n,m: integer;
    sn: longint;
(*==============================*)
procedure init;
var i: integer;
begin
write('Nhap so N=');readln(n);
for i:=1 to n do a[i]:=i;
end;
(*==============================*)
procedure swap( var x,y: integer);
var z: integer;
begin z:=x; x:=y; y:=z;
end;
(*==============================*)
procedure print;
var i: integer;
begin
sn:=sn+1;
for i:=1 to n do write(a[i]);
writeln;
end;
(*==============================*)
procedure hv(k: integer);
var j: integer;
begin
if k=1 then print
else
  for j:=k downto 1 do
  begin
    swap(a[k],a[j]);
    hv(k-1);
    swap(a[k],a[j]);
  end;
end;
(*===============================*)
begin
clrscr;
sn:=0;
init;
hv(n);
if sn<>0 then
writeln('Co tat ca',sn,' hoan vi cua ',n,'  so')
else writeln('Vo nghiem');
readln;
end.

Luôn yêu để sống, luôn sống để học toán, luôn học toán để yêu!!! :D
$$\text{LOVE}\left( x \right)|_{x = \alpha}^\Omega = + \infty $$
I'm still there everywhere.

#3
trbinh

trbinh

    Binh nhất

  • Thành viên
  • 29 Bài viết

Sao mình chạy chương trình nó không ra gì cả bạn ơi, bạn xem lại giúp mình



#4
DuongThelong

DuongThelong

    Lính mới

  • Thành viên
  • 7 Bài viết

HAY NHỈ!! NHƯNG TIẾC LÀ VIẾT SAI HẾT RỒI!! :)


Bài viết đã được chỉnh sửa nội dung bởi DuongThelong: 30-05-2015 - 10:34


#5
perfectstrong

perfectstrong

    $LOVE(x)|_{x =\alpha}^\Omega=+\infty$

  • Quản lý Toán Ứng dụng
  • 4991 Bài viết

HAY NHỈ!! NHƯNG TIẾC LÀ VIẾT SAI HẾT RỒI!! :)

Sai chỗ nào vậy?


Luôn yêu để sống, luôn sống để học toán, luôn học toán để yêu!!! :D
$$\text{LOVE}\left( x \right)|_{x = \alpha}^\Omega = + \infty $$
I'm still there everywhere.

#6
hoicmvsao

hoicmvsao

    Thượng sĩ

  • Thành viên
  • 299 Bài viết

Su dung thuat vet can:

procedure hoanvi(i);

var

begin

 for j:=1 to n do

  if b[j] then

   begin

     a[i]:=j;

     b[i]:=false;

     if (i=n) then result else hoanvi(i+1);

     b[i]:=true;

    end;

 end;


Bài viết đã được chỉnh sửa nội dung bởi hoicmvsao: 04-10-2015 - 14:20


#7
cuongtk2002

cuongtk2002

    Lính mới

  • Thành viên mới
  • 2 Bài viết
{Đề 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á !

Bài viết đã được chỉnh sửa nội dung bởi cuongtk2002: 07-07-2017 - 18:03


#8
duongtsurumi

duongtsurumi

    Lính mới

  • Thành viên mới
  • 1 Bài viết

Sai chỗ nào vậy?

Bạn giỏi toán quá


Chuyên cung cấp các sản phẩm máy bơm nước matra của Ý và máy bơm Tsurumi của Nhật Bản http://giamaybomnuoc.com/may-bom-nuoc-thai-tsurumi.html


#9
cuongtk2002

cuongtk2002

    Lính mới

  • Thành viên mới
  • 2 Bài viết
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#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);
}





1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh