45. 网易:题意很简单,写一个程序,打印出以下的序列。
(a),(b),(c),(d),(e)........(z)
(a,b),(a,c),(a,d),(a,e)......(a,z),(b,c),(b,d).....(b,z),(c,d).....(y,z)
(a,b,c),(a,b,d)....(a,b,z),(a,c,d)... .(x,y,z)
....
(a,b,c,d,.....x,y,z) (思路:全排列问题)
我先全排列 然后去除不符合的
(a),(b),(c),(d),(e)........(z)
(a,b),(a,c),(a,d),(a,e)......(a,z),(b,c),(b,d).....(b,z),(c,d).....(y,z)
(a,b,c),(a,b,d)....(a,b,z),(a,c,d)... .(x,y,z)
....
(a,b,c,d,.....x,y,z) (思路:全排列问题)
我先全排列 然后去除不符合的
#include<iostream>
#include<stdio.h>
using namespace std;
#define N 5
char str[30];
void comRes(char str[],int k,char result[],int count,int len)
{
if(count==len)
{
int f=0;
for(int i=0;i<len;i++)
{
//去除后一位比前一位相等或小于的
if(i>0&&result[i]<=result[i-1])
{
f=1;
break;
}
}
if(f==0)
{
cout<<"(";
for(int i=0;i<len;i++)
{
cout<<result[i];
if(i!=len-1)
cout<<",";
}
cout<<")";
return ;
}
else
return ;
}
for(int i=0;i<N;i++)
{
result[count]=str[i];
comRes(str,k+1,result,count+1,len);
}
}
void combine(char str[],int len)
{
char *result = new char[len];
comRes(str,0,result,0,len);
}
int main()
{
int i;
for(i=0;i<N;i++)
str[i]='a'+i;
for(i=1;i<=N;i++)
{
combine(str,i);
printf("\n");
}
return 0;
}
N=5的情况,全部显示太多;