1 条题解
-
0
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
- 上传者