求c语言多数排列方案递归的代码 样列输入 3 输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1

作者&投稿:荣卞 (若有异议请与网页底部的电邮联系)
全排列递归程序(用C语言),请求哥哥姐姐帮我修改~

这是改过之后的代码,改过的地方标出来了,有问题hi我,pur_e


#include "stdio.h"
void swap(char *a,char *b)//函数改了
{
char temp=*a;
*a=*b;
*b=temp;
}

void perm(char list[],int k,int m)
{ int i;
if(k==m)
{
for(i=0;i<=m;i++)
putchar(list[i]);
putchar('
');
}
else
for(i=k;i<=m;i++)
{
swap(&list[k],&list[i]);//调用改了
perm(list,k+1,m);
swap(&list[k],&list[i]);//调用改了
}
}

void main()
{
char array[99];
int i,n;

printf("请输入字符个数(n<99):");
scanf("%d",&n);
getchar();//吃掉最后的回车符
printf("请输入字符:");
for(i=0;i<=n-1;i++)
scanf("%c",&array[i]);
printf("
");

perm(array,0,n-1);

}

#include "stdio.h"

unsigned long C(int m,int n)//从n中选m
{
if(m==0 || m==n) return 1;
if(m==1) return n;
return C(m,n-1)+C(m-1,n-1);
}

void main()
{
int m,n;
scanf("%d%d",&m,&n);
printf("%ld
",C(m,n));
}

#include "stdio.h"
int d[100];
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");
}
//----交换法递归全排列算法---- ---------------------------
void swap(int *x,int *y) // 交换子程序
{
int t=*x;
*x=*y; *y=t;
}
void perm(int d[],int n) // n个数
{
if (n==1)
output(d); // 输出
else
for (int i=0;i<n;i++) // 逐一与末尾交换
{
if (i<n-1) // 与自已不交换
swap(&d[i],&d[n-1]); // 与末尾交换
perm(d,n-1); // 向前递归, n减1
if (i<n-1)
swap(&d[i],&d[n-1]); // 恢复交换
}
}
//-----------------------------------------
main()
{
init(d,3);
perm(d,3);
}

以前编的,结果是对的,现优化了一下,已忘了差不多了。

你在百度上搜吧,直接搜全排列就是了!!!搜得到!!!如果要用stl库函数,可以直接用next_permutation()


C语言 随机输入十个数 能把它们从大到小排列出来的程序怎么写?_百度...
可以采用冒泡排序~include <stdio.h>#define elemType int \/*元素类型*\/#define ASC 0 \/*升序*\/#define DESC 1 \/*降序*\/#define LEN 100 \/*数组长度*\/\/*录入数组*\/void inputArr (elemType arr[], int len) {int i;for (i=0; i<len; i++)scanf ("%d",&arr[i]);putchar ('\\...

c语言怎么任意输入4个数,然后将所有不同顺序的这4个数输出
采用递归的方法解决最好。再提供一种初学者可以使用的方法,这个方法比较直接,容易理解:include <stdio.h>void main(){int i,j,k,m,a[4];for(i=0;i<4;i++)scanf("%d",&a[i]);printf("\\n所有排列:\\n");for(i=0;i<4;i++)for(j=0;j<4;j++)for(k=0;k<4;k++)for(m=...

C语言怎么实现排列?
include <stdio.h>int main(void){ char s[]="11111",i,j; for(i=0;i<4;s[i++]='1') for(s[i]='0',j=i+1;j<5;j++){ s[j]='0'; printf("%s\\n",s); s[j]='1'; } return 0;} ...

c语言编程键盘输入5个数 大到小排列输出
include<stdio.h>#define N 5 \/\/定义要排序的个数N为5个main() \/\/主程序开始{int a[N],i,j,temp; \/\/定义数组a,变量i,j和中间存储变量tempprintf("please input %d numbers\\n",N); \/\/输出文本,"请输入N个数字(此处N=5)"for(i=0;i<N;i++) \/\/循环语句,利用i循环...

C语言用选择法对10个整数按从大到小排序。10个整数用scanf函数输入。_百...
\\x0d\\x0aa[i]=a[min]; \/\/a[i]里存放的最小数值\\x0d\\x0aa[min]=temp;} \\x0d\\x0aprintf("\\n从大到小排列是:\\n"); \/\/输出字符\\x0d\\x0afor(i=10;i>=1;i--) \/\/循环输出按大小排列的数据\\x0d\\x0aprintf("%5d",a[i]);\\x0d\\x0aprintf("\\n");\/\/...

C语言运算符优先级顺序
C语言运算符优先级顺序如下所示:自增运算符 ++ 和自减运算符 --,在作后缀运算符(如表达式 x++)时,较其用作前缀运算符(如表达式 ++x)时,具有较高的优先级。+、-、* 和 & 运算符记号不但可以当作一元运算符(unary operator,只需要一个操作数),也可以当作二元运算符(binary operator,...

C语言中,从键盘输入10个数,从小到大排列输出,怎么写啊,最好注明语句的...
include<stdio.h>void swap(int *a,int *b){ int tmp; tmp = *a; *a = *b; *b = tmp;}void bubblesort(int k[],int n){ \/*冒泡排序*\/ int i,j,temp; int cont = 0; for(i=0;i<n-1;i++) \/\/控制每趟往前推一个,即少比较一次 { ...

趣味C语言 用编程计算排列组合问题 求大神帮忙啊 一个人有5本新书,借...
{ PA++;PB=0;PC=0;\/\/由于PB是上一步增加所得,不考虑其他原因,同上。} if(PA>ALLBOOK)break; \/\/最终结果一定是PC慢慢流向PA,PA达到5,则停止。printf("A:%d,B:%d,C:%d\\n",PA,PB,PC);WayCount++;} printf("Its %d answer in this question!",WayCount);} ...

C语言四个数从小到大排序
if(a>c) {t=a;a=c;c=t;} if(a>d) {t=a;a=d;d=t;} if(b>c) {t=b;b=c;c=t;} if(b>d) {t=b;b=d;d=t;} if(c>d) {t=c;c=d;d=t;} printf("排序结果如下:\\n"); printf("%d %d %d %d \\n",a,b,c,d);C语言即中文版的C语言,是一种面向过程的...

如何用C语言设计程序排列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[i]和a[j] *\/ a[j]=a[j+1];a[j+1]=t;} 优点:简洁紧凑、灵活方便:C语言...

江夏区19434529659: 求c语言多数排列方案递归的代码 样列输入 3 输出 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 -
阴耍龙胆: #include "stdio.h" int d[100]; 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"); } //----交换法递归全排列算法---- ------...

江夏区19434529659: c语言中全排列问题 -
阴耍龙胆: //输入一个数输出这个数所有的排列,递归做法#include<stdio.h> int a[100]; int n; void output() { int i; for(i=1;i<=n;i++) printf("%3d",a[i]); printf("\n"); } void Swap(int &a,int &b) //注意取地址 { int t; t=a; a=b; b=t; } void pailie(int t) { int i; if(t==n) //输...

江夏区19434529659: acm题 用c语言设计一个递归算法求全排列 -
阴耍龙胆: //1.cpp生成1~n的全排列 #include<stdio.h> void Arrange(int cur,int n,int* arr) {if(cur==n+1){for(int i=1;i<cur;i++)printf("%d ",arr[i]);printf("\n");return ;}for(int i=1;i<=n;i++){int ok=1;for(int j=1;j<cur;j++)if(arr[j]==i)ok=0;if(ok){arr[cur]=...

江夏区19434529659: c语言,求递归算法的技巧?最好有经典例子!
阴耍龙胆: c语言中递归的最经典应用是求两个数的最小公约数,代码如下:int MinDivisor( int m, int n){ if(m%n==0) return n; else return MinDivisor(n, m%n);}

江夏区19434529659: 用c语言递归调用:对数组中10个整数按由小到大排序 -
阴耍龙胆: #include int a[20]; void f(int n) { int i,t; if(n { f(n+1); t=a[n]; for(i=n+1;i if(t>a[i]) a[i-1]=a[i]; else break; a[i-1]=t; } } int main() { int i; for(i=1;i scanf("%d",&a[i]); f(1); for(i=1;i printf("%d ",a[i]); printf("\n"); return 0; }

江夏区19434529659: c语言,递归排序问题,求解 -
阴耍龙胆: #include<stdio.h> #define N 3 int a[N] = {1, 2, 3}; //输出数组内容 void print() {int i;for(i = 0; i < N; ++i){printf("%d ", a[i]);}printf("\n"); } //交换数组中两个给定位置的数字 void swap(int p1, int p2) {int t = a[p2];a[p2] = a[p1];a[p1] = t; } //...

江夏区19434529659: C语言:用递归的方式对数组排序 -
阴耍龙胆: #include <stdio.h>#define N 8void selection_sort(int a[], int n) { daoint i, t, imax = 0;if(n < 1) return;for(i = 1; i < n; ++i) {回if(a[imax] < a[i])imax = i;}if(imax != n - 1) {t = a[n - 1];a[n - 1] = a[imax];a[imax] = t;}selection_sort(a, n - 1); }int ...

江夏区19434529659: 用C语言的递归方法求1!+3!+5!+7! -
阴耍龙胆: #include <stdio.h> long calc(long i) { if( i > 0 ) { return i * calc(i-1); }return 1; } long calc2(long i) { if( i > 0 ) { return calc(i) + calc2(i-2); }return 0; } int main() { int i = 0; int j = 1; long ret = 0;while( i%2 == 0 || i <= 0 ) { printf("input end value, like 7 : "); ...

江夏区19434529659: 任意编写一个递归函数,符合C语法即可. 任意编写一种排序算法. -
阴耍龙胆: 递归函数:求1~n的和:int sum(int n) {if(n==1)return 1; return n+sum(n-1); } 冒泡排序(求有n个int元素的a[]数组的升序排序):void sort(int a[],int n) {int i,j,t; for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) if(a[j]>a[j+1]) {t=a[j]; a[j]=a[j+1]; a[j+1]=t;} }

江夏区19434529659: C语言用递归方式求n个数的和 -
阴耍龙胆: #include <iostream>#include <iomanip> using namespace std; int add(int n); int main() { int i=100; int b; b=add(100); cout<<b<<endl; } int add(int n) { if(n==1) return 1; else return n+add(n-1); },利用add()函数进行递归,这是个从1加到n的递归函数

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网