n个数全排列 C++程序 修改

#include <iostream.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>
#include <fstream.h>

ofstream ofile("8.txt",ios::app);

void swap(int &a, int &b)
{
int temp=a;
a=b;
b=temp;
}

void perm(int a[],int m,int n)
{
if (m==n)
{
for (int i=0; i<=m; i++)
{
//cout<<a[i]<<" ";
ofile<<a[i]<<" ";
}
//cout<<endl;
ofile<<endl;
}
else
{
int k=m;
for (int j=k; j<=n; j++)
{
swap(a[j], a[k]);
perm(a, m+1, n);
swap(a[j], a[k]);
}
}
}

void main()
{
int a[6] = {1,2,3,4,5,6};
int start=clock();
int end;
srand((unsigned)time(NULL));
perm(a, 0, 5);

end=clock()-start;
ofile<<"运行时间:"<<end<<endl;
cout<<"time:"<<end<<endl;
}

上面的程序是6个数全排列的C++ 程序,在.txt文件中可以得到全部720个排列的结果。但是我现在想对输出的排序结果每次取出一个排序,然后进行后续计算,不知如何修改!谢谢! 程序是我在网上下的,运行没问题

我简单理解了下你的意思,就是在这么多序列中按照要求来提取一列。下面对你的程序做了简单修改,能够实现上面的要求,编译过的,你再看看哦,能否满足你的要求。

#include <iostream.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>
#include <fstream.h>
#include <string.h>//新加入的头文件,getline()函数所需

ofstream ofile("8.txt",ios::app);

void swap(int &a, int &b)
{
int temp=a;
a=b;
b=temp;
}

void perm(int a[],int m,int n)
{
if (m==n)
{
for (int i=0; i<=m; i++)
{
//cout<<a[i]<<" ";
ofile<<a[i]<<" ";
}
//cout<<endl;
ofile<<endl;
}
else
{
int k=m;
for (int j=k; j<=n; j++)
{
swap(a[j], a[k]);
perm(a, m+1, n);
swap(a[j], a[k]);
}
}
}

//下面的函数实现的功能是提取指定的第k个序列
void getdata(int a[], int k)
{
ifstream out("8.txt");
int i=0;
char str[50];
while(!out.eof())
{
out.getline(str, sizeof(str));
i=i+1;
if(i==k)
{
ofile<<"所要提取的序列是第"<<k<<"列,对应为:"<<endl;
ofile<<str<<endl;
break;
}
}
}

void main()
{
int a[6] = {1,2,3,4,5,6};
int start=clock();
int end;
srand((unsigned)time(NULL));
perm(a, 0, 5);
getdata(a, 20);//指定提取第几个序列,譬如这次是20

end=clock()-start;
ofile<<"运行时间:"<<end<<endl;
cout<<"time:"<<end<<endl;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-07-09
一个更简单的程序 希望对你有用
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int arr[6]={1,2,4,6,3,5};
sort(arr,arr+6); //从小到大排好序
do
{
copy(arr,arr+6,ostream_iterator<int>(cout," "));
cout<<endl; //屏幕上输出数组
//每次循环 得到数组一个新的排列
}while(next_permutation(arr,arr+6));
return 0;
}
相似回答