求一fortran或C语言程序,求6个元素的所有6个元素的组合.如ABCDEF,组合成6个元素的组合:AABBBB、AABBCC、ABCCDD.组合出来的每个字符组都是六个元素,但里面可以有1~6种不同的元素.
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/09 10:17:13
求一fortran或C语言程序,求6个元素的所有6个元素的组合.如ABCDEF,组合成6个元素的组合:AABBBB、AABBCC、ABCCDD.组合出来的每个字符组都是六个元素,但里面可以有1~6种不同的元素.
求一fortran或C语言程序,求6个元素的所有6个元素的组合.
如ABCDEF,组合成6个元素的组合:AABBBB、AABBCC、ABCCDD.
组合出来的每个字符组都是六个元素,但里面可以有1~6种不同的元素.
求一fortran或C语言程序,求6个元素的所有6个元素的组合.如ABCDEF,组合成6个元素的组合:AABBBB、AABBCC、ABCCDD.组合出来的每个字符组都是六个元素,但里面可以有1~6种不同的元素.
#include<stdio.h>
void swap(char a[],int i,int j)
{
char t=a[i];
a[i]=a[j];
a[j]=t;
}
int FirstL(char a[],int n)
{
int j;
for(j=n-1;j>0;j--)
{
if(a[j-1]<a[j])
return j-1;
}
return j;
}
int FirstG(char a[],int j,int n)
{
int i;
for(i=n-1;i>j;i--)
{
if(a[j]<a[i])
return i;
}
return j;
}
void reversal(char a[],int j,int n)
{
int i,t;
for(i=j+1,t=n-1;i<t;i++,t--)
{
swap(a,i,t);
}
}
int main(void)
{
int n;
char a[100];
int i,j,k,t;
scanf("%d",&n);
scanf("%s",a);
for(i=0,t=1;i<n;i++)
{
t*=(i+1);
}
while(t--)
{
for(i=0;i<n;i++)
{
if(i==n-1)
printf("%c\n",a[i]);
else
printf("%c",a[i]);
}
if(t==0) break;
j=FirstL(a,n);
k=FirstG(a,j,n);
swap(a,j,k);
reversal(a,j,n);
}
}
输出结果很多,只能截取部分,望采纳~