1 条题解

  • 0
    @ 2025-4-12 21:33:29

    C :

    #include <stdio.h>
    #define max 500
     int  count=0;
    int repeat(char str[],int a ,int b )
     {
      int i;
              if(b>a)
               for(i=a;i<b;i++)
                  if(str[i]==str[b])
                      return 0;
               return 1;
    }
    
    
     void perm(char str[],int k,int m)
     {
               int i;
               if(k==m)
               {
                  count++;
                  for(i=0;i<=m;i++)
                      printf("%c",str[i]);
                  printf("\n");
                  return ;
               }
               else for(i=k;i<=m;i++)
                       if(repeat(str,k,i))
                       {
                              char t;
    						  t=str[i];
    						  str[i]=str[k];
    						  str[k]=t;
                               perm(str,k+1,m);
                               t=str[i];
    						   str[i]=str[k];
    						  str[k]=t;
                       }
       
     }
     int main()
     {
          char str[max];
          int n,i;
    	  scanf("%d",&n);
          getchar();
          for(i=0;i<n;i++)
              scanf("%c",&str[i]);
          perm(str,0,n-1) ;
          printf("%d\n",count);
          return 0;
     }
    

    C++ :

    #include <iostream>
    
    #include <algorithm>
    
    using   namespace std ;
    
    long ans ;
    
    int ok(char str[],int a ,int b )
    
    {
    
            if( b > a)
    
             for(int i = a ; i< b ; i++)
    
                     if( str[i] == str[b] )
    
                             return 0 ;
    
             return 1 ;
    
    }
    
    void perm(char str[],int k ,int m)
    
    {
    
             int i ;
    
             if( k == m )
    
             {
    
                     ans ++ ;
    
                     for( i = 0 ;i <= m ;i++ )
    
                     {
    
                             cout<<str[i];
    
                     }
    
                     cout<<endl;
    
             }
    
             else  
    
        for( i = k ; i <= m ;i++)
    
                     if( ok(str,k,i) )
    
                     {
    
                             swap ( str[k],str[i] );
    
                             perm(str, k+1 , m );
    
                             swap(str[k],str[i] ) ;
    
                     }
    
             
    
    }
    
    int main(int argc, char* argv[])
    
    {
    
       char str[1000];
    
       int n , i ;
    
       cin>>n ;
    
        ans = 0 ;
    
        for( i = 0 ; i < n ;  i ++)
    
      cin>>str[i];
    
        perm(str,0,n-1) ;
    
        cout<<ans<<endl;
    
             return 0;
    
    }
    
    

    Java :

    
    
    import java.awt.List;
    import java.util.Scanner;
    
    /**
     *
     * @author wanshuzhen
     */ 
    
    public class Main {
        public static int ans=0;
        public static void main(String[] args)
        {
           
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            char [] list = new char[n];
            list = sc.next().toCharArray();
            perm(list, 0, n-1);
           // System.out.print("输出序列为:");
            System.out.println(ans);
        }
        public static void perm(char []list ,int k, int m)
        {
            if(k==m)
            {
                ans++;
                for (int i=0;i<=m;i++){
                    System.out.print(list[i]);
                }
                System.out.println();
            }
            else{
                for(int i=k;i<=m;i++)
                    if(ok(list,k,i)){
                        swap(list,k,i);
                        perm(list, k+1, m);
                        swap(list,k,i);
                    }
            }
        }
        public  static boolean ok(char []list,int k,int i){
            if(i>k)for(int t=k;t<i;t++)if(list[t]==list[i])return false;
            return true;
        }
        public static  void swap(char []list ,int i,int j){
            char temp;
            temp= list[i];
            list[i]=list[j];
            list[j]=temp;
            
        }
    }
    
    
    • 1

    信息

    ID
    116
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者