1 条题解

  • 0
    @ 2025-4-14 18:41:37

    C :

    #include <stdio.h>
    #include <stdlib.h>
    #define SIZE 100
    #define bool int
    #define false 0
    #define true 1
    int num = 0;
    int contains(char str[SIZE], int k, int i)
    {	
    	for (int j = k; j < i; j++) 
    	{               
    		if (str[i] == str[j])     
    			return true;
        }
    	return false;
    }
    void MySwap(char *a, char *b)
    {
    	char temp;
    	temp= *a;
    	*a = *b;
    	*b = temp;
    }
    void Perm(char str[SIZE], int k, int m)
    {
    	if (k == m)
    	{
    		for (int i = 0; i <= m; i++)
    			printf("%c",str[i]);
    		num++;
    		printf("\n");
    	}
    	else 
    	{	
    		for (int i = k; i <= m; i++)
    		{
    			if (!contains(str, k, i))
    			{
    				MySwap(&str[k], &str[i]);
    				Perm(str, k+1, m);
    				MySwap(&str[k], &str[i]);
    			}
    		}
    		
    	}
    }
    int main()
    {	
    	int n;
    	scanf("%d",&n);
    	char s[SIZE];
    	scanf("%s", s);
    	Perm(s, 0, n-1);
    	printf("%d\n",num);
    	return 0;
    }
    

    C++ :

    #include<iostream>
    #include<string>
    using namespace std;
    
    string res[100];
    int n;
    
    int swap(char &a, char &b){
    	char temp;
    	temp = a;
    	a = b;
    	b = temp;
    	
    	return 0;
    }
    
    void ex(){
    	int sum = 0,t = 0,flag = 1;
    	string ss[100]={""};
    
    	for(int i = 0; i < n; i++){
    		for(int j = t; j >0; j--)
    			if(ss[j] == res[i])
    				flag = 0;
    			if(flag){
    				ss[++t] = res[i];
    				sum++;
    				cout << ss[t] << endl;
    			}
    			flag = 1;
    	}
    	cout << sum;
    }
    
    int perm(string s, int k, int m){
    	if(k == m - 1){
    		static int c = 0;
    		res[c] = s;
    		c++;
    		n = c;
    	}else{
    		for(int i = k; i < m; i++){
    			swap(s[k],s[i]);
    			perm(s,k+1,m);
    			swap(s[k],s[i]);
    			}
    	}
    	return 0;
    }
    
    int main(){
    	string s;
    	int n;
    	cin >>n >>s;
    	perm(s, 0 ,s.length());
    	ex();
    return 0;}
    

    Pascal :

    program pailie2;
    var
     n,i,m,d:longint;
     a,v:array[1..1000]of char;
     c:array[1..1000]of string;
     b:array[1..1000]of boolean;
    procedure save;
    var
     i:integer;
    begin
     inc(d);
     for i:= 1 to n do c[d]:=c[d]+a[i];
     for i:= 1 to d-1  do
      if c[d]=c[i] then
       begin
        c[d]:='';
        dec(d);
        break;
       end;
    end;
    procedure try(dep:longint);
    var
     i:longint;
    begin
     for i:= 1 to n do
      if b[i] then
       begin
        a[dep]:=v[i]; b[i]:=false;
        if dep=n then save else try(dep+1);
        b[i]:=true;
       end;
    end;
    begin
     fillchar(b,sizeof(b),true); d:=0;
     readln(n);
     for i:= 1 to n do read(v[i]);
     try(1);
     for i:= 1 to d do writeln(c[i]);
     writeln(d);
    end.
    
    • 1

    信息

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