• [THÔNG BÁO] CẢNH BÁO LỪA ĐẢO MẠO DANH QUẢN TRỊ VIÊN
    Chào các thành viên GameVN,
    Dạo gần đây tình trạng lừa đảo scamming và phishing đang gia tăng. Ban quản trị GameVN xin lưu ý toàn bộ thành viên:
    KHÔNG/ ĐỪNG / CẤM cho bất kỳ ai tự xưng là quản trị viên của server vay tiền.
    Mọi hành vi lân la làm quen, tự tiện nhắn tin trên Discord, Facebook, Zalo hoặc các nền tảng mạng xã hội khác,
    núp bóng dưới danh nghĩa sinh hoạt của quản trị viên, đều có tỉ lệ rất, rất cao là lừa đảo.
    Nếu có tài khoản lạ add friend hoặc nhắn tin xin tiền dưới danh nghĩa admin:
    Block ngay
    Report ngay
    Không chuyển khoản, không cung cấp thông tin cá nhân


    Quản trị viên của forum và Discord server GameVN không có nhu cầu vay tiền thành viên.
    Không có lý do nào để admin chủ động kết bạn rồi xin tiền.
    Mọi thông báo chính thức chỉ được đăng trên kênh thông báo của server và topic chính thức trên forum.
    Tin nhắn riêng từ tài khoản lạ không phải thông báo của ban quản trị.
    Cảm ơn các bạn đã chú ý và cùng giữ cộng đồng an toàn.
    — Ban quản trị GameVN

    Tắt thông báo bằng nút X bên góc phải của bảng thông báo*

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
420
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