用c语言把所有的结果打印出来
追答1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。
由于一个数的全排列就是其本身,从而得到以上结果。
2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六组数。
即以3开头的和4,5的全排列的组合、以4开头的和3,5的全排列的组合和以5开头的和3,4的全排列的组合.
从而可以推断,设一组数p = {r1, r2, r3, ... ,rn}, 全排列为perm(p),pn = p - {rn}。
因此perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)。当n = 1时perm(p} = r1。
为了更容易理解,将整组数中的所有的数分别与第一个数交换,这样就总是在处理后n-1个数的全排列。
算法如下:
#include
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, 6};
perm(list, 0, 5);
printf("total:%d\n", n);
return 0;
}
1到6中6个数有多少种排列方式 用c语言编出来
不允许重复的话:第一位有6种,第二位有5中,...共有6*5*4*3*2*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++)...
1到6数字组成一个6位数,数字不能重复,有几种方案,请列举出来,
2. 第一位数字有6种选择(1-6中的任意一个),确定了第一位数字后,第二位数字有5种选择(剩下的5个数字),以此类推,直到第六位数字只有1种选择。3. 因此,总的方案数为6 * 5 * 4 * 3 * 2 * 1 = 720种不同的六位数。4. 每一种排列都是唯一的,因为数字不能重复,所以这720种...
找出123456这六个数的全排列,但是貌似数太大!c语言
if(n1!=n2&&n2!=n3&&n3!=n4&&n4!=n5&&n5!=n6&&n6!=n1)\/\/六个数都不相同return 1;这个判断是错误的,举例:121212这个数,在你的逻辑里面会return 1;这显然不符合题意。造成的结果就是,你table[cur++]的次数超过了1000次,数组溢出了。
如何用C语言设计程序排列6个数字的大小顺序?
排序数组可以使用冒泡算法:如果前一个数据比后一个大,则交换。{ int i,j,t,a[6];printf("Please input 6 integers:\\n");for(i=0;i<6;i++)scanf("%d",&a[i]);for(i=0;i<5;i++) \/* 冒泡法排序 *\/ for(j=0;j<6-i-1;j++)if(a[j]>a[j+1]){t=a[j];\/* 交换a...
用51单片机C语言编写程序实现6位共阴极数码管循环显示0123456789ABCDEF...
= P2^6;\/\/段选sbit wei = P2^7;\/\/位选void delay(uchar x)\/\/延时函数{uchar i,j;for(i = 0; i<x; i--)for(j = 0; j<255; j--);}void xianshi() \/\/显示函数{uchar i;for(i = 0; i<6; i++){P0=wen[i];\/\/位选wei=1;\/\/开锁存wei=0;\/\/关锁存P0=huancun[...
C语言怎样用数组把6个整型数按从小到大的顺序输出?
C语言实现将数组的六个元素按从小到大的顺序输出,可以采用内部排序算法对数组的元素进行排序,然后输出排序后的数组,就可以得到按从小到大的顺序输出。以快速排序为例的排序代码:void quickSort(int a[],int l,int r) { if(l>=r)return;int i = l;int j = r;int key = a[l];\/\/选择...
用c语言编写循环语句1到6的代码怎么写?
可以使用for循环语句来实现输出1到6的代码,示例代码如下:```c include <stdio.h> int main(){ int i;for(i = 1; i <= 6; i++){ printf("%d ", i);} return 0;} ```以上代码中,我们定义了一个变量i,并且通过for循环语句进行了6次迭代。每次迭代时,将变量i的值输出到屏幕上...
...个随机数?怎样产生1到6之间的六个随机数?用c语言的rand()函数_百度...
单纯用rand函数虽然产生的数是随机的,但是每次都是相同的,不信可以试一下,最简单的解决办法是加上srand函数,如下:int a;srand(time(NULL));a=rand()%6+1;即可
请用c语言设计程序实现将1 2 3 4 5 6 7 8 9 10十个数,从大到小输出
} if(k != i) { tmp=array[k]; array[k]=array[i]; array[i]=tmp; } }}int main(int argc,char *argv[]){int a[10]={1,2,3,4,5,6,7,8,9,10};select_sort(a,