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;
    
    }
    
  • 相关阅读:
    Java ArrayList,LinkedList使用
    Vue 使用axios分片上传
    Vue 中Axios 使用
    Vue 自定义组件
    Java IO系统--RandomAccessFile
    Java IO系统--字符流
    Java String类
    静态导入(static import)
    枚举(Enum)
    Java 可变参数
  • 原文地址:https://www.cnblogs.com/lzy321/p/10847742.html
Copyright © 2011-2022 走看看