谁不完全喜欢排列,对吧?我知道,他们太棒了--太有趣了!
好吧,为什么不把这件事做得有趣些呢?
这是一个挑战:
给定一个精确形式的输入:nPr,其中n是从池中提取的池,r是从该池中选择的数目( n和r是整数),输出/返回排列的确切数目。对于那些对术语有点生疏的人来说:排列,德夫。2a。
然而,这正是挑战发挥作用的地方(让它变得不太容易):
您不能将任何内置的库、框架或方法用于您的置换函数。您不能使用阶乘方法、置换方法或任何类似的方法;您必须自己编写所有内容。
如果需要进一步澄清,请在评论中毫不犹豫地告诉我,我将迅速采取相应行动。
下面是一个I/O示例:
样本函数是permute(String) -> int
输入:
permute("3P2")输出:
6这是密码-高尔夫,所以最短的代码获胜!
发布于 2015-11-07 04:38:58
[n,r]=strread(input(''),'%dP%d');disp(prod((n-r+1):n))试着让它变小,但是MATLAB的一个缺点就是输入。它需要32个字符才能从输入字符串中获得这两个数字!
相当清楚的代码。获取表单%dP%d中的输入,其中%d是整数。把它分成n和r。然后显示n-r+1到n范围内每个整数的乘积。有趣的是,即使xP0给出了正确的答案1,这也是因为在MATLAB中,prod()函数返回1,如果你尝试做一个空数组的乘积。每当r为零时,范围将为空数组,因此我们得到1。
这也是完美的工作与八度以及。你可以在网上试用这里。
发布于 2015-11-07 06:41:36
def f(s):a,b=map(int,s.split('P'));P=1;exec"P*=a;a-=1;"*b;print P相当直截了当。将数字输入处理为a,b。将运行中的产品保持为P,乘以a, a-1, a-2, ...的第一个b术语。
发布于 2015-11-07 15:55:31
Ans→Str1
expr(sub(Ans,1,⁻1+inString(Ans,"P→P ;n
1
If expr(Str1 ;If n^2*r ≠ 0
prod(randIntNoRep(P,P+1-expr(Str1)/P²
AnsTI-BASIC有一个“列表的乘积”函数,因此绕过对内置程序的限制并不太困难。然而,TI-BASIC不支持空列表-所以我们需要
为了提取这两个数字,我提取第一个数字作为子字符串。这是昂贵的,它占据了整个第二行。为了避免在第二个数字中再次执行此操作,我将变量P设置为该数字,并使用expr(计算整个字符串,然后除以P 2。
最后,我对这两个数字之间的列表进行随机排列(注意将一个加到第二个数),然后取乘积。
https://codegolf.stackexchange.com/questions/63183
复制相似问题