triple

第一周:枚举

回眸只為那壹抹淺笑 提交于 2020-03-17 03:40:22
枚举:基于逐个尝试答案的一种求解策略 例题1:完美立方 描述: 形如(a^3) = (b^3) +(c^3) +(d^3) 等式称为完美立方等式。例如12,6,8,10。编写一个程序,对任给的正整数N(N<=100),寻找所有的四元组(a,b,c,d),使得满足(a^3) = (b^3) +(c^3) +(d^3) ,其中a,b,c,d大于1,小于等于N,且b<=c<=d。 输入: 一个正整数N(N<=100) 输出: 每行输出一个完美立方。 输入样例: 24 输出样例: Cube = 6, Triple = (3,4,5) Cube = 12, Triple = (6,8,10) Cube = 18, Triple = (2,12,16) Cube = 18, Triple = (9,12,15) Cube = 19, Triple = (3,10,18) Cube = 20, Triple = (7,14,17) Cube = 24, Triple = (12,16,20) 解题思路: 四重循环枚举a,b,c,d,a在最外层,d在最里层,每一层都是从小到大枚举,范围:a[2,N],b[2,a-1],c[b,a-1],d[c,a-1] 代码: # include <iostream> # include <cstdio> //通过使用c标准输入和输出库

【网易官方】极客战记(codecombat)攻略-森林-返回Agrippa_agrippa-returned

柔情痞子 提交于 2020-02-24 10:16:24
用上高级函数,你的代码胜似流水。 简介 就像在之前的 Agrippa Defense 关卡中一样,您将重放相同的场景,但具有更高级的功能。 你可以使用一个函数来计算一个值,然后 返回 它可以在你的代码中使用它。 def triple(a): b = a + a + a; return b; hero.say("3 × 3 = " + triple(3)) hero.say("4 × 3 = " + triple(4)) 默认代码 def enemyInRange(enemy): # 如果敌人少于5个单位,返回一个true值 return False def cleaveOrAttack(enemy): if hero.isReady('cleave'): hero.cleave(enemy) else: hero.attack(enemy) while True: enemy = hero.findNearestEnemy() if enemy: # 调用 enemyInRange 检查敌人的距离。 if enemyInRange(enemy): cleaveOrAttack(enemy) 概览 在之前的 Agrippa Defense 级别中,我们通过使用函数来提取逻辑来简化我们的代码。在这个级别中,我们使用一个函数来计算一个值并将其传回给调用代码。 在这个级别中

1009. Triple Inversions (35)

亡梦爱人 提交于 2019-12-02 11:39:01
PAT上一道题目。题意是在一个1~n组成的n元数组A中,计算三元逆序的个数 (满足i<j<k,Ai>Aj>Ak的(Ai,Aj,Ak)) 的个数。 所有的三元逆序对,从中间数Aj考虑。对每一个数Ap,如果知道在p之前比Ap大的个数leftBigger以及在p 之后比Ap小的个数rightSmall。那么以Aj作为中间数的三元逆序对个数为leftBigger*rightSmall。对每一个p,计算以Ap为中间数的三元逆序,累加求和即可。计算leftBigger的方法可以采用树状数组。我们可以反过来看,已知Ap的位置p的情况下,计算leftBigger可以等价于计算leftSmall。leftBigger(Ap) = p-1-leftSmall(Ap)。先构建如下场景: 1.构建一个辅助数组a(1)~a(n).初始值均为0; 2.从左到右遍历A1~An.当遍历到Ap时,修改a(Ap) = 1;此时a(1)~a(Ap-1)值为1的个数即为在Ap的leftSmall(Ap),leftSmall(Ap) = sum(a(1)~a(Ap-1)).树状数组可以在lg(n)时间内计算出数组区间内元素之和。 代码如下: #include<iostream> #include<vector> using namespace std ; int main() { int n; cin >>n;

函数练习

一个人想着一个人 提交于 2019-12-01 20:36:01
1.把一个字典扁平化,源字典为 {'a':{'b':1,'c':2}, 'd':{'e':3,'f':{'g':4}}} 。 上面字典的扁平化可以转化为下面的字典:{“a.c”:2,"d.e":3,"d.f.g":4,"a.b":1} source = {'a':{'b':1,'c':2}, 'd':{'e':3,'f':{'g':4}}} target = {} #recursion def flatmap(src,prefix = ""): for k,v in src.items(): if isinstance(v,(list,tuple,set,dict)): flatmap(v,prefix=prefix+k+".")#递归调用 else: target[prefix+k]=v flatmap(source) print(target) 结果为: {'a.b': 1, 'a.c': 2, 'd.e': 3, 'd.f.g': 4} 像一般这样的函数都会生成一个新的字典,上面的代码借用了外部的变量,破坏了函数的封装,因此可以对上面的函数稍微改造下,dest字典可以由内部来创建,当然也可以外部提供。 source = {'a':{'b':1,'c':2}, 'd':{'e':3,'f':{'g':4}}} #recursion def flatmap(src,dest