1 条题解

  • 0
    @ 2024-12-18 14:07:32

    C :

    #include <stdio.h>
    
    int f(int n, int m) {
    	if (n < 1 || m < 1)
    		return 0;
    	else if (n == 1 || m == 1)
    		return 1;
    	else if (n < m)
    		return f(n, n);
    	else if (n == m)
    		return f(n, n - 1) + 1;
    	else
    		return f(n, m - 1) + f(n - m, m);
    }
    
    int main() {
    	int n;
    	scanf("%d", &n);
    	if (n >= 2 && n <= 10) {
    		int r = f(n, n);
    		printf("%d\n", r);
    	} else {
    		printf("输入不合法,请输入 2 到 10 之间的正整数。\n");
    	}
    	return 0;
    }
    

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    int ans = 0;
    int n;
    vector<string>op;
    
    void dfs(int x, int st, string s) {
    	if (st > n)
    		return;
    	if (st == n) {
    		op.push_back(s);
    //		cout << s << endl;
    		ans++;
    		return;
    	}
    	for (int i = 1; i <= x; i++) {
    		char c = i + '0';
    		string ks;
    		ks += c;
    		ks += '+';
    		ks += s;
    		dfs(i, st + i, ks);
    	}
    }
    
    signed main() {
    //	freopen("C:\\Users\\lenovo\\Desktop\\计算机\\尝试-大二\\算法基础\\2\\3.in", "r", stdin);
    //	freopen("C:\\Users\\lenovo\\Desktop\\计算机\\尝试-大二\\算法基础\\2\\3.out", "w", stdout);
    	cin >> n;
    	for (int i = 1; i <= n; i++) {
    		string s;
    		s += i + '0';
    		dfs(i, i, s);
    	}
    //	sort(op.begin(), op.end());
    //	for (string lp : op) {
    //		if (lp.size() == 1)
    //			break;
    //		cout << lp << endl;
    //	}
    	cout << ans;
    	return 0;
    }
    
    

    Java :

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int n = input.nextInt();
            Bs bs = new Bs();
            System.out.println(bs.center(n,n));
        }
    
        public static class Bs {
            public int center(int n, int m) {
                if (n == 1 || m == 1) {
                    return 1;
                } else if (n < m) {
                    return center(n, n);
                } else if (n == m) {
                    return center(n, m - 1) + 1;
                } else {
                    return center(n, m - 1) + center(n- m, m);
                }
            }
        }
    }
    
    • 1

    信息

    ID
    683
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    提交数
    4
    已通过
    2
    上传者