列表

详情


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;
}

上一题