怎么用C语言进行排列?比如,1到6 六个数,输出所有可能的组合

如题所述

第1个回答  推荐于2017-09-04
刚回答了一个组合的,现在是排列的。方法类似,采用递归方法。

void CopyArrayWithExcept(int a[], int nCount, int b[], int nExcept)
{
for(int i=0, j=0; i<nCount; 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<nCount; 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;
}本回答被提问者和网友采纳

从小到大排列6个数(C语言)
int main(void){ int a[6],i,j,k;for (i=0;i<6;i++) scanf("%d",&a[i]);\/\/输入6个整数 for (i=0;i<5;i++)\/\/升序排列 { k=i;for (j=i+1;j<6;j++)if (a[j]< a[k]) k=j;if (k!=i){ j=a[k];a[k]=a[i];a[i]=j;} } for (i=0;i<6;i++)...

求助:列出6个数的所有可能的排序组合的c程序
if(NO_Same(a)){ th=1;for(i=0;i<N;i++){num[SUM]+=a[i]*th;th*=10;} printf("%ld\\t",num[SUM]);SUM++;} s++;} printf("\\n\\n\\t排列总数为:%d\\n",SUM);if(c=getch()) sort(num,SUM);getch();} int NO_Same(int a[N]){ int i,j,flag=1;for(i=0;i<N;...

C语言怎样用数组把6个整型数按从小到大的顺序输出?
void quickSort(int a[],int l,int r) { if(l>=r)return;int i = l;int j = r;int key = a[l];\/\/选择第一个数为key while(i<j) { while(i<j && a[j]>=key)\/\/从右向左找第一个小于key的值 j--;if(i<j) { a[i] = a[j];i++;} while(i<j && a[i]<key...

找出123456这六个数的全排列,但是貌似数太大!c语言
if(n1!=n2&&n2!=n3&&n3!=n4&&n4!=n5&&n5!=n6&&n6!=n1)\/\/六个数都不相同return 1;这个判断是错误的,举例:121212这个数,在你的逻辑里面会return 1;这显然不符合题意。造成的结果就是,你table[cur++]的次数超过了1000次,数组溢出了。

在C语言中,如何输出一组数的排列组合
scanf("%d",&k);int *list = (int *)malloc(k);for (int i = 0; i < k; i ++){ list[i] = i + 1;} \/\/ int list[] = {1, 2, 3, 4, 5};perm(list, 0, k-1);printf("total:%d\\n", n);return 0;}该程序的输入为一个任意自然数n,将输出从1到n的全排列。

C语言如何用选择排序法排序随机产生的六个整数 望大神帮忙
include"stdlib.h"#include"time.h"#include <stdio.h>void main(){ int i; int a[6]; int max,j; srand((unsigned)time(NULL)); for (i = 0; i<6; i++) { a[i] = rand(); } for(i = 0; i < 5; i ++) { max = i; for(j ...

...随机数?怎样产生1到6之间的六个随机数?用c语言的rand()函数_百度知...
单纯用rand函数虽然产生的数是随机的,但是每次都是相同的,不信可以试一下,最简单的解决办法是加上srand函数,如下:int a;srand(time(NULL));a=rand()%6+1;即可

用51单片机C语言编写程序实现6位共阴极数码管循环显示0123456789ABCDEF...
include<reg51.h># define uint unsigned int# define uchar unsigned charcode uchar shu[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, \/* 0 1 2 3 4 56 7*\/0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; \/\/数码管段选 \/* 8 9a b c def*\/...

C语言怎么编写输出6个数再换行输出数字的命令?
可以采用循环来实现该效果。以输出整型数组元素,每行6个为例,可以参考下面的代码:int a[100];int i;for(i = 0; i < 100; i ++){ printf("%d,",a[i]);if(i%6==5) printf("\\n"); \/\/因为i是从0开始计数,所以每次i%6为5时换行,实现每行6个效果。} ...

1~60个数字 分成六个横排十个竖排 每个竖排加起来的数字是183 横排加...
int i,j,temp=1;for(i=0;i<6;i++){ for(j=0;j<10;j++)a[i][j]=temp++;} for(;;){ 这边写数字在数组中位置的全排列,没想出来怎么弄。for(i=0;i<6;i++){ temp=0;for(j=0;j<10;j++){ temp+=a[i][j];} if(temp!=305)continue;} for(i=0;i<10;i++){ te...

相似回答