1 条题解

  • 0
    @ 2025-4-12 21:43:14

    C :

    #include <stdio.h>
    int m = 0;
    int list[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    
    int f(int n, int k)
    {
    	if (k == 0)
    	{
    		m++;
    		return 0;
    	}
    	for (int i = n; i >= 1; i--)
    	{
    		if (i != k && list[i] == 0)
    		{
    			list[i] = 1;
    			f(n, k - 1);
    			list[i] = 0;
    		}
    	}
    }
    
    int main()
    {
    	int t;
    	scanf("%d", &t);
    	while (t--)
    	{
    		int n;
    		scanf("%d",&n);
    		f(n, n);
    		printf("%d\n", m);
    		m=0;
    	}
    	 return 0;
    }
    

    C++ :

    #include<stdio.h>
    int a[57];
    int main()
    {
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        int n,i;
        a[0]=0;
        a[1]=0;
        a[2]=1;
        for(i=3;i<=50;i++)
        {
            a[i]=(i-1)*(a[i-1]+a[i-2]);
        }
        int t;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&i);
             printf("%d\n",a[i]);
        }
        return 0;
    }
    
    

    Java :

    import java.util.Scanner;
    class Main {
    	public static void main(String[] args) {
    		JingSaiTiTest test=new JingSaiTiTest();
    		Scanner reader=new Scanner(System.in);
    		int T=reader.nextInt();//读取一共有多少行数据
    		int[] s=new int[11];//方法
    		s[0]=0;s[1]=1;s[2]=2;s[3]=9;
    		for(int i=4;i<11;i++){
    			int first=test.arrange(i+1)-1;
    			int second=0;
    			for(int k=1,j=i-1;k<i-1||j>0;k++,j--){
    				second=second+test.group(i+1, k)*s[j];
    			}
    			s[i]=first-second;
    		}
    		for(int k=0;k<T;k++){//输出数据
    			int first=reader.nextInt();
    			for(int i=0;i<11;i++){
    				if(first==i){
    				System.out.println(s[i-1]);
    				}
    			}
    		}
    	}
    
    }
    class JingSaiTiTest{
    	public JingSaiTiTest(){		
    	}
    	int arrange(int a){
    		int k=1;
    		for(int i=1;i<=a;i++){
    			k=k*i;
    		}
    		return k;
    	}
    	int group(int a,int b){
    		int c=arrange(a);
    		int d=arrange(b);
    		int e=arrange(a-b);
    		int f=c/(d*e);
    		return f;
    	}
    	int add(int a){
    			
    		return 0;
    	}
    }
    
    • 1

    信息

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