全排列函数C语言简单 c语言求全排列

C语言题,输出全排列,写下简单代码,要让初学者看懂我给你举两个简单的列子:题目:输入三个整数x,y,z,请把这三个数由小到大输出 。1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小 。2.程序源代码: main() { int x,y,z,t; scanf("%d%d%d",x,y,z); if (xy) {t=x;x=y;y=t;} /*交换x,y的值*/ if(xz) {t=z;z=x;x=t;}/*交换x,z的值*/ if(yz) {t=y;y=z;z=t;}/*交换z,y的值*/ printf("small to big: %d %d %d\n",x,y,z); }题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4 。组成所有的排列后再去掉不满足条件的排列 。2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i5;i)/*以下为三重循环*/for(j=1;j5;j)for (k=1;k5;k){ if (i!=ki!=jj!=k)/*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k);} }你的问题很笼统,根本就是让人无从答起,我只是举了其中几个列子而已 , 如果你还是要执着的话,那我的答案就是你所学的教材,你若能把你的书看懂了,你就不会在问这种问题了,
c语言全排列基本思想是用回溯法来搜索每一种排列
不过楼主对问题全排列函数C语言简单的说明不是很详细全排列函数C语言简单 , 所以我只好写个普适性比较大的全排列函数C语言简单了
下面这个程序读取一行字符串,然后对该字符串中的所有字符进行全排列输出
注全排列函数C语言简单:输入的字符串不要太长,因为不存在能够在短时间内输出全排列的算法
#include stdio.h
#include string.h
#include memory.h
int m;//记录字符串长度
int n;//记录字符串中的字符种类数
char map[256];//记录是哪几种字符
int count[256];//记录每种字符有多少个
void Make_Map(char *str)//统计字符串的相关信息
{
int s[256];
int i;
memset(s,0,sizeof(s));
memset(count,0,sizeof(count));
m=strlen(str);
while(*str)
{
s[*str];
str;
}
n=0;
for (i=0;i256;i)
if (s[i])
{
map[n]=i;
count[n]=s[i];
n;
}
}
int stack[1000];//递归用的栈,并记录当前生成的排列
void Find(int depth)//递归式回溯法生成全排列
{
if (depth==m)
{
int i;
for (i=0;idepth;i) putchar(map[stack[i]]);
putchar('\n');
}
else
{
int i;
for (i=0;in;i)
if (count[i])
{
stack[depth]=i;
count[i]--;
Find(depth 1);
count[i];
}
}
}
main()
{
char str[1000];
gets(str);
Make_Map(str);
Find(0);
}
c语言,函数全排列 , 求代码,如图?#include stdio.h
char c,s[10];
int n;
void pern(int k)
{int i;
if(k==n)
printf("%s\n",s 1);
else
for(i=k;i=n;i)
{c=s[k];s[k]=s[i];s[i]=c;
pern(k 1);
c=s[k];s[k]=s[i];s[i]=c;
}
}
int main()
{ int i;
scanf("%d",n);
for(i=1;i=n;i)
s[i]='0' i;
pern(1);
return 0;
}
【全排列函数C语言简单 c语言求全排列】关于全排列函数C语言简单和c语言求全排列的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读