1 条题解

  • 0
    @ 2025-2-14 20:50:07

    C :

    #include <stdio.h>   
    #include <stdlib.h>  
    #define N 10    
    void perm(int*,int,int);    
    int main() 
    {   
        int num[N+1],i,n; 
    	scanf("%d",&n);      
    	for(i = 1; i <= n; i++)     
    	    num[i] = i;      
    	perm(num,1,n);      
    	return 0;  
    }    
    void perm(int* num,int i,int n) 
    {  
        int j, k, tmp;        
    	if(i < n) 
    	{       
    	    for(j = i; j <= n; j++) 
    		{          
    		    tmp = num[j];               // 旋转该区段最右边数字至最左边         
                for(k = j; k > i; k--)                  
    			    num[k] = num[k-1];              
    			num[i] = tmp;              
    		    perm(num,i+1,n);              // 还原  
                for(k = i; k < j; k++)                  
    			    num[k] = num[k+1];              
    			num[j] = tmp;          
    		}      
    	}       
    	else 
    	{  // 显示此次排列          
    	    for(j = 1; j <= n; j++)               
    		printf("%d", num[j]);          
    		printf("\n");      
    	}  
    }  
    
    
    • 1

    信息

    ID
    409
    时间
    1000ms
    内存
    2MiB
    难度
    10
    标签
    递交数
    2
    已通过
    0
    上传者