这是全排列的一个应用,常规方法有递归,暴力组合法,考虑到这道题目,字母26个,数字10个,如果用递归法,组成三位的密码,该方法可能会导致栈溢出(不知道分析的对不对?如有不对,还请看到的给出宝贵意见)。
所以直接暴力组合法吧。时间复杂度O(n^3);
暴力组合:思路就是用3个循环;分别组合第一第二三位;重复的不输出;
/* @FileName:FullPermutation.cpp : 定义控制台应用程序的入口点。
@auther:mishidemudong
@date:2015-5-20
*/
#include "stdafx.h"
#include<iostream>
#include<stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fout;
fopen_s(&fout,"file.txt","w");
char s[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
int i=0 , j = 0, k = 0;
for (i = 0; i < 36; i++)
{
for (j = 0; j < 36; j++)
{
for (k = 0; k < 36; k++)
{
if (k!=i&&j!=i&&k!=j)
fprintf(fout, "%c%c%c\n", s[i], s[j], s[k]);
//printf("%c%c%c\n", s[i], s[j], s[k]);
}
}
}
return 0;
}