用C语言编写一个排列组合的程序

列出1,2,3,4,5任意三个数字的组合。

1.组合的元素是无序的。例如1,2,3和3,2,1是一样的,只能列一次
2.组合中的元素是唯一的。例如1,2,2是无效的

#include<stdio.h>

int a[5];
int len1,len2,len3;

void input(int len1,int len2,int len3)
{
printf("%d %d %d\n",a[len1],a[len2],a[len3]);
}

void solve(int len1,int len2,int len3)
{
input(len1,len2,len3);
if(len1==2) return;
if(len3<4) len3++;
else if(len2<3)
{
len2++;
len3=len2+1;
}
else if(len1<2)
{
len1++;
len2=len1+1;
len3=len2+1;
}
solve(len1,len2,len3);
}

void main()
{
int i;
for(i=0;i<5;i++) a[i]=i+1;
printf("所构成组合是:\n");
solve(0,1,2);
return ;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-22
//新产生的随机数与前面相同就放弃此数随机,重新随机
//还有一种跳蚤算法
//以下是BCB环境调试的

srand((unsigned)time(NULL));
randok = true;

void __fastcall TForm1::Button3Click(TObject *Sender)
{

int num1,i,j;
i = 0;

while( i<11 )
{
num1 = rand() % 11;
x[i]->Text = String(num1);
for(j=0; j<i; j++)
{
randok = true;
if( StrToInt(x[i]->Text) == StrToInt(x[j]->Text) )
{
randok = false; //与前面的随机数有相同的,跳出重新随机
break;
}
}

if(randok == true)
{
i++;
}

Sleep(10);
}

}
第2个回答  2013-08-22
#include "stdafx.h"

#include<stdio.h>
void deal(char [],int n,int m);
int _tmain(int argc, _TCHAR* argv[])
{
char context[10];
int num,count;
/*puts("输入数字总数:");
scanf("%d",&num);
puts("\n输入每行输出的个数:");
scanf("%d",&count);*/
gets(context);

deal(context,5,3);
return 0;
}
void deal(char a[],int n,int m)
{
int i,j;
for(i=0;i<(n-m+1);i++)
{
for(j=i;j<m+i;j++)
printf("%c",a[j]);
printf("\n");
}

}
在.net编译通过
第3个回答  2013-08-22
int main(char* args[]){
int i,j,k;
for(i =1;i<=5;i++)
for(j =1;j<=5;j++)
for(k =1;k<=5;k++)
if(i!=k&&i!=j&&j!=k)
printf("%d%d%d",i,j,k);
}
第4个回答  2013-08-22