0 1 2 3 全排列 用C语言怎么编写 (用数组),详细点,谢谢

如题所述

第1个回答  2013-03-28

//0 1 2 3 全排列 

#include<stdio.h>

#include<conio.h>

int main()

{

    int i,j,k,l;

    for(i=0;i<4;i++)

    for(j=0;j<4;j++)

    for(k=0;k<4;k++)

    for(l=0;l<4;l++)

      printf("%d%d%d%d ",i,j,k,l);

    getch();

    getch(); 

程序运行结果

还有,全排列就是把全部的可能写出来吗?

        -物联网校企联盟技术部

第2个回答  2013-03-28
#include <stdio.h>
int n = 0;
void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d ", list[i]);
printf("\n");
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}
int main()
{
int list[] = {1, 2, 3, 4, 5};
perm(list, 0, 4);
printf("total:%d\n", n);
return 0;
}

//http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1191914.html来自:求助得到的回答
第2个回答  2013-03-28
#include "stdio.h"
void Perm(int list[],int k,int m)
{
int temp;
if(k==m-1)
{
for(int i=0;i<m;i++)
{
printf("%d",list[i]);
}
printf("\t");
}
else
{
for(int i=k;i<m;i++)
{
temp=list[k];list[k]=list[i];list[i]=temp;
Perm(list,k+1,m);
temp=list[k];list[k]=list[i];list[i]=temp;
}
}
}
int main()
{
int list[]={0,1,2,3};
Perm(list,0,4);
}本回答被提问者采纳

c语言题:输出由0,1,2,3组成的数字不重复不同的三位数
include <stdio.h>void perm(int* data, int n, int cur){ if (cur == n-1) { for (int i = 0; i < n-1 ; ++i) { if(data[0] != 0)\/\/不输出0 开头的 { printf("%d ", data[i]); } } printf("\\n"); } else { for...

用C语言编程求1、2、3到n的全排列
return 0;}

c语言中,如何输出一个数组的全排列!如a[3]={1,2,3} 要求输出1 2 3,1...
int a[N];void perm(int);void print();void swap(int, int);int main()r> { int i,n;int offset;for(i = 0; i<N; i++)a[i] = i + 97;perm(0);} void perm(int offset){ int i, temp;if(offset == N-1){ print();return;} for(i = offset; i < N; i++){...

一个C语言全排列的算法。 比如,输入3,则将123的全排列全部输出:123...
int a1,a2,a3,a4,a5,a6,a7,a8,a9,n,t=0;scanf("%d",&n);for(a1=1;a1<=n;a1++)if(n==1){printf("%d\\n",a1);t=t+1;} else for (a2=1;a2<=n;a2++)if(a2!=a1){if(n==2) {printf("%d%d\\n",a1,a2);t=t+1;} else for (a3=1;a3<=n;a3++)if(a3!=a2&&...

用0、1、2、3可以排成多少个不同的四位数?(可以重复)
用符号 C(n,m) 表示。C(n,m)=A(n,m)\/m!;C(n,m)=C(n,n-m)。(n≥m)其他排列与组合公式 从n个元素中取出m个元素的循环排列数=A(n,m)\/m!=n!\/m!(n-m)!. n个元素被分成k类,每类的个数分别是n1,n2,...nk这n个元素的全排列数为 n!\/(n1!×n2!×...×nk!). ...

求c语言多数排列方案递归的代码 样列输入 3 输出 1 2 3 1 3 2 2 1...
int dn; \/\/ 全排列 总数 void init(int d[],int n) \/\/ 填初始数据 { dn=n;for (int i=0;i<n;i++)d[i]=i+1;} void output(int d[]) \/\/ 输出 { for (int i=0;i<dn;i++)printf("%d ",d[i]);printf("\\n");} \/\/---交换法递归全排列算法--- ---...

找出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语言打印一窜数字的所有组合
int a[N]={1,2,3,3,4,7,7};int b[NUM];deal(a,b);\/\/处理数组 arrange(N-cnt,b,0);\/\/排列输出 } 2.和第一问一样,我只选了1,2,3,3,4,7,7。程序上只是打印函数改了下,deal函数做了调整,本来想在第一问的排列基础上再在特定的位置上插入3和7,后来发现会重复,做了...

(C++)关于全排列--循环移位法,怎么怎么用C++语言实现!
\/\/全排列 void QPL(char* Arr, char* begin){ if (*begin == '\\0')cout << Arr<<" ";else { for (char* p = begin; *p != '\\0'; p++){ Swap(p, begin);QPL(Arr, begin + 1);Swap(p, begin);} } } void main(){ char a[] = "123";QPL(a, a);system("pause...

相似回答