我得到了以下信息:
参宿七是一个谷物爱好者和一个巨大的慈善家。每天他都有N个人需要养活。作为一个麦片爱好者,他想传播他对麦片的热爱,所以他开了一个食品储藏室,为有需要的人提供麦片。食品室有N个碗,总是储存N种不同类型的谷物和N种不同类型的牛奶。每种类型的牛奶和谷物每天都只供应一个人。参宿七意识到,如果他一遍又一遍地做同样的事情,他最终会感到厌倦。所以他每天都改变准备麦片的方法。请注意,参宿七是牛奶第一理论的坚定信徒,并赞扬任何说谷物第一是正确方法的人。所以当有空碗的时候,他总是先把牛奶倒进去。给定N个人,你能计算出参宿七可以用多少种不同的方法来准备麦片碗吗?注:如果输出大于或等于109 + 7,则取109 + 7的模
输入
程序将要求输入一个值,即N
输出
打印出参宿七可以准备谷物的不同方法的数量。
示例如下:
input: 1 output: 1
input: 2 output: 24
input: 3 output: 3240
我试着用下面的方法解决它:
#include <stdio.h>
#include <math.h>
int main(){
long long int n;
scanf("%lld", &n);
long long int result = 1;
for (int i = 1; i <= n; i++)
{
result = 1;
if (i == 1)
{
result = 1;
}else{
result = result * (i*i) * (pow(6, i-1) * pow(10, i-2));
}
}
printf("%lld\n", result);
return 0;
}
是的,它工作的3个输入,但这些是唯一的测试用例,所以我提交了程序,它没有被接受。就我个人而言,我认为我的错误是在寻找数字的算法,我希望有人能帮助我解决这个问题。
2条答案
按热度按时间2skhul331#
参宿七可以开始与任何人,P1到PN和给予他们一个碗和牛奶(牛奶总是第一,所有的碗都是一样的)。然后他可以给同一个人给予麦片,或者给另一个人一个碗和牛奶,等等,直到所有的人都有碗,牛奶和麦片。他从来不给予麦片粥而不给碗和牛奶。
对于N=2,可能的顺序是
乘以p,m,c的8个组合,得到24。
对于任何N,这与通过NxNxN立方体的路径有关,其中路径只能在x,y和z轴上以递增的步骤进行。我假设有一个封闭形式的解决方案。
g52tjvyc2#
有N!人们排队的方式也是如此,牛奶的种类和谷物的种类也是如此。这就是N!^3个组合。(在N = 2的情况下,这将是8,在N = 3的情况下,这将是216)。
斯塔克(第一个回答的人)已经列出了N = 2的3种可能的顺序。
N = 3的可能顺序是:
请注意,人的顺序是通过将N中的人排成一行来覆盖的!方式,因此严格的顺序为p1,p2和p3。既然牛奶和麦片的种类已经选好了,我也就懒得给它们编号了。
现在15 * 216 = 3240。
剩下的唯一问题是为可能的顺序找到一个漂亮的封闭表达式。
添加:对于N = 1,只有一种可能的顺序添加牛奶和谷物。请注意,有2个操作要执行。
如果另一碗作为第一碗添加,则可以在制备第二碗之前、期间或之后添加谷物。这给出了N = 2的3种可能的顺序。
添加更多的碗继续这种模式。因此,总的可能订单是3 * 5 *. * (2N - 1)