Bài hoán vị n số đầu tiên C++

  • Thread starter Thread starter datlee
  • Ngày gửi Ngày gửi

datlee

Donkey Kong
Lão Làng GVN
Tham gia ngày
13/12/08
Bài viết
415
Reaction score
38
Nội dung đề bài như sau : in ra tất cả hoán vị của n số đầu tiên, dùng pp đệ quy.
Về hướng đi thì mình nghĩ như sau : đi từ số đầu tiên đến số cuối cùng, mỗi số ta gán sau nó hoán vị của n-1 số còn lại.
Nhưng về trình bày qua C++ thì mình chưa làm ra cái hoanvi(n-1) còn lại.
tạm thời demo cái của mình như sau, xuất ra dãy n số rồi :(
À còn nữa, các bạn đừng đưa code ra luôn nha, chỉ cho mình cái dàn bài thôi. :d
Cám ơn trước :D
[spoil]#include <iostream.h>
void hoanvi(int n);
void main()
{
int n;
cout<<"Nhap vao n: \n",cin>>n;
hoanvi(n);
}
void hoanvi(int n)
{
int i;

if(n==1)
{
cout<<1<<endl;
return;
}
else
{
for(i=1;i<=n;i++)
{
cout<<i;


}
cout<<endl;


}
}
[/spoil]
 
Chỉnh sửa cuối:
hơ, hoán vị có phải là n! không nhỉ, đây là bài tìm n! còn gì

Mã:
int giaithua(int n)
{
if(n != 1)
return n*giaithua(n-1);
else
return n;
}
 
Hoán vị đệ quy thì thế này
Bước thứ i chọn phần tử thứ i
phần tử thứ i là các phần từ chưa được cho vào hoán vị từ 1->i-1 ( dùng mảng đánh dấu )
Đệ quy tiếp phần tử i+1.
Nhớ gán mảng đánh dấu và trả lại đánh dấu sau khi đệ quy
 
Sau 1 thời gian mò mẫm, mình cũng ra đc hoán vị, nhưng phải nhập 1 dãy vào rồi mới hoán vị dãy đó.
#include <iostream.h>
void HoanVi(int n);
void doivitri(char &a,char &b);
#include<string.h>
#define max 10
char a[max];
void doivitri(char &a,char &b)
{
char tg=a;
a=b;
b=tg;
}

void HoanVi(int n)
{
if(n==1)
cout<<a<<endl;
else
{
for ( int i = n-1; i>=0;i--)
{
doivitri(a[n-1],a);
HoanVi(n-1);
doivitri(a,a[n-1]);
}
}
}

int main()
{
int k,i;
int n;
cout<<"Nhap xau : "<<endl;
/*cin>>n;
for(i=0;i<n;i++)
{

cout<<i+1;
}*/
cin>>a;
k=strlen(a);
cout<<"KET QUA:"<<endl;
HoanVi(k);
cout<<endl;
}


Nhưng đề bài lại là nhập số n thôi.
VD : bài của tớ phải nhập 1234 thì nó hoán vị chuỗi 1234.
Nhưng đề là : nhập số 4, và ra hoán vị của 1234.
Mình định nhập n, dùng dòng lập for để in ra chuỗi từ 1 đến n. Nhưng sau đó làm sau thì bí 8-}.
Mong mọi người giúp đỡ :D.
 
Thay char a[max] bằng int a[max]
Nhập n
rồi dùng for i=1->n, a=i
Thế là ra mảng giống thé
 
Back
Top