OR117. 倒水
描述
要把m升的水倒入n个相同的容器中(假设容器足够大),允许有的容量是空的,问共有多少种不同的倒法?(用k表示)5,1,1和1,5,1和1,1,5是同一种倒法。
输入描述
第一行是测试数据的数目x(0≤x≤20)。以下每行均包含二个整数m和n,以空格分开。1≤m,n≤10。输出描述
对输入的每行数据m和n,用一行输出相应的k。示例1
输入:
1 7 3
输出:
8
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-07-08
#include <stdio.h> #include <stdlib.h> int fun(int m, int n) {//m个苹果放在n个盘子中共有几种方法 if(m==0||m==1 || n==1) return 1; if(n>m) return fun(m,m); else return fun(m,n-1)+fun(m-n,n); } int main() { int x; int m,n; int i; scanf("%d",&x); for(i=0;i<x;i++) { scanf("%d%d",&m,&n); printf("%d\n",fun(m,n)); } }
C 解法, 执行用时: 2ms, 内存消耗: 344KB, 提交时间: 2019-02-18
#include<stdio.h> int main() { int i,m,n; scanf("%d",&i); int count; while(i>0) { scanf("%d %d",&m,&n); count = x(m,n,m); printf("%d\n",count); i--; } return 0; } int x(int N, int n,int pri) //剩余,n个,先前 { int f; if(N>=pri) f=pri; else f=N; int count=0; if(N==0 || N==1 || n==1) return 1; while(f>=N-N*(n-1)/n) { count += x(N-f, n-1, f); f--; } return count; }