level 10
挂羊头卖犬肉
楼主
#include <iostream>
using namespace std;
int main()
{
void subclass(char *a,const int n);
char a[4]={'a','b','c','d'};
subclass(a,4);
for(int i=0;i<4;i++) //输出调用函数后的a[4],检查函数复原的正确性
cout<<a[i];
cout<<endl;
return 0;
}
void subclass(char *a,const int n)
{
if(n==2) //n=2时终止递归
{cout<<a[0]<<endl;
cout<<a[1]<<endl;
} else
for(int i=0;i<n;i++) //剔除掉第i个元素,先输出,再往下递归
{for(int j=0;j<n;j++)
if(j!=i) cout<<a[j];
cout<<endl;
char temp=a[i]; //将a[i]挖掉,后面的前移一位
for(j=i;j<n-1;j++)
a[j]=a[j+1];
subclass(a,n-1);
for(j=i+1;j<n;j++) //从a[i]开始后移一位,复原a[i]
a[j]=a[j-1];
a[i]=temp;
}
}
2011年09月14日 03点09分
1
using namespace std;
int main()
{
void subclass(char *a,const int n);
char a[4]={'a','b','c','d'};
subclass(a,4);
for(int i=0;i<4;i++) //输出调用函数后的a[4],检查函数复原的正确性
cout<<a[i];
cout<<endl;
return 0;
}
void subclass(char *a,const int n)
{
if(n==2) //n=2时终止递归
{cout<<a[0]<<endl;
cout<<a[1]<<endl;
} else
for(int i=0;i<n;i++) //剔除掉第i个元素,先输出,再往下递归
{for(int j=0;j<n;j++)
if(j!=i) cout<<a[j];
cout<<endl;
char temp=a[i]; //将a[i]挖掉,后面的前移一位
for(j=i;j<n-1;j++)
a[j]=a[j+1];
subclass(a,n-1);
for(j=i+1;j<n;j++) //从a[i]开始后移一位,复原a[i]
a[j]=a[j-1];
a[i]=temp;
}
}