ae变速插件:怎样用C实现 输入N,输出1到N这N个自然数的全排列呢?

来源:百度文库 编辑:高校问答 时间:2024/05/01 07:29:36
谢谢
calling for SIMPLE ones!

#include <stdio.h>
inline void Swap(char& a, char& b)
{// 交换a和b
char temp = a;
a = b;
b = temp;
}

void Perm(char list[], int k, int m)
{ //生成list [k:m ]的所有排列方式
int i;
if (k == m) {//输出一个排列方式
for (i = 0; i <= m; i++)
putchar(list[i]);
putchar('\n');
}
else // list[k:m ]有多个排列方式
// 递归地产生这些排列方式
for (i=k; i <= m; i++) {
Swap (list[k], list[i]);
Perm (list, k+1, m);
Swap (list [k], list [i]);
}
}

int main()
{
char s[]="123";
Perm(s, 0, 2);
return 0;
}

#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;
#include <time.h>;

FILE *fp;

void perm(char *, int, int);

int main(void) {
char str[256];
time_t t;

fp = fopen("./log.txt", "w");
if (fp == NULL){
printf("fopen error!\n");
exit(1);
}

printf("input a string smaller than 255:");
gets(str);

t = time(0);

perm(str, 0, strlen(str));

t = time(0) - t;

fprintf(fp, "kill time:%ldsec\n", t);

exit(0);
}

void perm(char *str, int pos, int len) {
char tmp;
int i;

if (pos < len-1) {
// recursion.
for (i = pos; i < len; i++) {
// change and recursion.
tmp = str[pos];
str[pos] = str[i];
str[i] = tmp;

perm(str, pos+1, len);

tmp = str[pos];
str[pos] = str[i];
str[i] = tmp;
}
}
else {
// end recursion.
fputs(str, fp);
fputc('\n', fp);
}

return;
}
char s[10], t[10];

void convert(char *strSource, char *strTarget, int nLen)
{
int i, j;
char strConvert[10];

if(nLen == 1) {
strTarget[0] = strSource[0];
printf("%s\n", t);
return;
}
else {
for(i=0; i<nLen; i++) {
for(j=0; j<i && strSource[i] != strSource[j]; j++);
if(j == i) {
strTarget[0] = strSource[i];
memcpy(strConvert, strSource, i);
memcpy(strConvert+i, strSource+i+1, nLen-i-1);
convert(strConvert, strTarget+1, nLen-1);
}
}
}
}

main()
{
int n;

scanf("%d", &n);
sprintf(s, "%d", n);

memset(t, 0, 10);
convert(s, t, strlen(s));
}
#include <iostream>;
using namespace std;
#include <vector>;
#include <algorithm>;

template <typename T>;
void PRINT_ELEMENTS(const T&col1,const char*optsctr="")
{
typename T::const_iterator pos;
cout << optsctr;
for (pos = col1.begin(); pos !=col1.end(); ++pos)
cout << *pos << " ";
cout << endl;
}

int main()
{
vector<int>; col1;
col1.push_back(1);
col1.push_back(2);
col1.push_back(2);
col1.push_back(4);
PRINT_ELEMENTS(col1,"on entry: ");

while (next_permutation(col1.begin(),col1.end()))
{
PRINT_ELEMENTS(col1," ");
}

cin.get();
}