怎么用C语言进行排列?比如,1到6 六个数,输出所有可能的组合
答案:1 悬赏:40
解决时间 2021-03-28 20:49
- 提问者网友:战皆罪
- 2021-03-28 10:37
怎么用C语言进行排列?比如,1到6 六个数,输出所有可能的组合
最佳答案
- 二级知识专家网友:愁杀梦里人
- 2021-03-28 11:20
刚回答了一个组合的,现在是排列的。方法类似,采用递归方法。
void CopyArrayWithExcept(int a[], int nCount, int b[], int nExcept)
{
for(int i=0, j=0; i {
if(i != nExcept)
{
b[j++] = a[i];
}
}
}
int g_nPrintCount = 0; //为了控制每行输出10个
int ArrangeAll(int a[], int nCount, char* szPre)
{
if(nCount == 1)
{
printf("%s%d ", szPre, a[0] );
if( (++g_nPrintCount%10==0))
{
printf("\n");
}
return 1;
}
else
{
int nTotal=0;
for(int i=0; i {
char szBuf[10] ={0};
int *pNum = new int[nCount-1];
sprintf(szBuf, "%s%d", szPre, a[i]);
CopyArrayWithExcept(a, nCount, pNum, i);
nTotal += ArrangeAll(pNum, nCount-1, szBuf);
delete[] pNum;
}
return nTotal;
}
}
int main()
{
int a[] = {1,2,3,4,5,6};
int nTotal = ArrangeAll(a, sizeof(a)/sizeof(a[0]), "");
printf("\nTotal Count=%d\n", nTotal);
return 1;
}
void CopyArrayWithExcept(int a[], int nCount, int b[], int nExcept)
{
for(int i=0, j=0; i
if(i != nExcept)
{
b[j++] = a[i];
}
}
}
int g_nPrintCount = 0; //为了控制每行输出10个
int ArrangeAll(int a[], int nCount, char* szPre)
{
if(nCount == 1)
{
printf("%s%d ", szPre, a[0] );
if( (++g_nPrintCount%10==0))
{
printf("\n");
}
return 1;
}
else
{
int nTotal=0;
for(int i=0; i
char szBuf[10] ={0};
int *pNum = new int[nCount-1];
sprintf(szBuf, "%s%d", szPre, a[i]);
CopyArrayWithExcept(a, nCount, pNum, i);
nTotal += ArrangeAll(pNum, nCount-1, szBuf);
delete[] pNum;
}
return nTotal;
}
}
int main()
{
int a[] = {1,2,3,4,5,6};
int nTotal = ArrangeAll(a, sizeof(a)/sizeof(a[0]), "");
printf("\nTotal Count=%d\n", nTotal);
return 1;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯