1 条题解

  • 0
    @ 2025-4-7 21:19:29

    C :

    #include <stdio.h>
    #include <string.h>
    int time;
    int stuff[20];
    
    void check(int sum, int i, int n)
    {
        if(i == n+1) // fail
            return;
        else if(sum == 40){
            time++;
            return;
        }else if(sum < 40){
            check(sum, i+1, n);
            check(sum+stuff[i], i+1, n);
        }else if(sum > 40)
            return;
    
        return ;
    }
    
    int main()
    {
        int n;
        while(scanf("%d", &n) != EOF){
            memset(stuff, 0, sizeof(stuff));
            time=0;
            for(int i = 0; i < n; i++)
                scanf("%d", stuff + i);
            check(0, 0, n);
            printf("%d\n", time);
        }
        return 0;
    }
    
    

    C++ :

    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    
    using namespace std;
    
    int a[20];
    int n;
    
    void compute(int a[],int &sum,int k,int left){//递归函数
        //cout<<"left="<<left<<endl;
        if(left==0){
            sum++;
            return;
        }
        else{
            if(k>=n||a[k]>left)return;
            else{
                for(int i=k;i<n;i++)
                    compute(a,sum,i+1,left-a[i]);
            }
        }
    }
        
    
    int main(void){
        int sum;
        while(scanf("%d",&n)!=EOF){
            sum=0;
            for(int i=0;i<n;i++)
                    scanf("%d",&a[i]);
            sort(a,a+n);
            compute(a,sum,0,40);
            printf("%d\n",sum);
        }
        return 0;
    }
    

    Java :

    import java.io.BufferedInputStream;
    import java.util.Arrays;
    import java.util.Scanner;
    public class Main{
        static int n;
        static int arr[];
        public static void main(String[] args) {
            Scanner s = new Scanner(new BufferedInputStream(System.in));
            while(s.hasNextInt()){
                n = s.nextInt();
                arr = new int[n];
                for(int i=0;i<n; i++)
                    arr[i] = s.nextInt();
                System.out.println(f(n-1,40));
            }
        }
    
        static int f(int n,int sum){
            if(sum < 0)
                return 0;
            if(sum == 0)
                return 1;
            if(n==0)
                return arr[0] == sum ? 1:0;
            else
                return f(n-1,sum)+f(n-1,sum-arr[n]);
        }
    }
    
    
    • 1

    信息

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