zoukankan      html  css  js  c++  java
  • c语言的全排列

    在c语言中实现全排列,对于刚接触c语言,还没学习算法的人来说,比较困难了吧。估计大佬也不会看这种基础的东西,全排列实现的办法很多,在c++中有一个专门的函数可以使用,但是在c中实现就有点困难了。如果你想出用一个循环使一个数字每一位都不相同,那么你就走进了死胡同,这种办法运算量巨大,往往到了高位就会超时。所以就要使用算法(非递归类型)。
    算法采用的是交换
    递归其实也是一种交换

    #include<stdio.h>
    #include<windows.h>
    int main()
    {
    int a[9],n,y=1,i,j,all,p=1,t,hi,ki,m,x;
    int xiao_biao,temp,zhong;
    printf("请输入位数最高9位
    ");
    scanf("%d",&n); 
    
    
    for( i=0;i<n;i++){
    a[i]=i+1;
    printf("%d",a[i]);
    }
    printf("
    ");
    for(i=1;i<=n;i++){
    p*=i;
    }
    all=1;
    while(all<p){
    for(i=n-1;i>0;i--){
    if(a[i]>a[i-1]){xiao_biao=i-1;break;}
    }
    temp=a[xiao_biao];
    for(t=xiao_biao+1;t<n;t++){
    for(i=t;i<n;i++){
    hi=a[t]-temp;
    ki=a[i]-temp;
    if(hi<=ki&&hi>0){
    a[xiao_biao]=a[t];y=t;
    }
    }
    }
    a[y]=temp;
    m=((n-1)-(xiao_biao))/2;
    j=xiao_biao+1;
    if((n-1)-(xiao_biao)==2){temp=a[n-1];a[n-1]=a[n-2];a[n-2]=temp;}
    else if((n-1)-(xiao_biao)==3){temp=a[n-1];a[n-1]=a[n-3];a[n-3]=temp;}
    else if((n-1)-(xiao_biao)==4||(n-1)-(xiao_biao)==5)x=2;
    else if((n-1)-(xiao_biao)==6||(n-1)-(xiao_biao)==7)x=3;
    else if((n-1)-(xiao_biao)==8||(n-1)-(xiao_biao)==9)x=4;
    if((n-1)-(xiao_biao)==4||(n-1)-(xiao_biao)==5||(n-1)-(xiao_biao)==6||(n-1)-(xiao_biao)==7||(n-1)-(xiao_biao)==8||(n-1)-(xiao_biao)==9){ 
    zhong=n;
    for(i=0;i<x;i++){
    
        temp=a[zhong-1];
    a[zhong-1]=a[j];
    a[j]=temp;
    zhong--;
    j++;
    }
    zhong=n;
    }
    
    for( i=0;i<n;i++){
    printf("%d",a[i]);
    }
    
    printf("
    ");
    all++; 
    }
    system("pause");
    return 0;
    
    }
    
  • 相关阅读:
    个人项目 源程序特征统计程序(C++)
    自我介绍+软工五问
    团队作业3——需求改进&系统设计
    Four Fundamental Operations(JS) --结对项目
    WordCount of Software Engineering
    代码开发、测试发布
    需求改进---系统设计
    综合系统开发---需求分析
    读书笔记---软件设计原则、设计模式
    自我介绍+课程六问
  • 原文地址:https://www.cnblogs.com/lzy321/p/10847742.html
Copyright © 2011-2022 走看看