递归问题学习二之卡牌组合问题
问题:
给定17中卡牌,每种卡牌的数值为1-17的平方,给定一个攻击值,卡牌的数值代表卡牌的攻击值,达到这样的攻击值能有多少种组合方式
思路:
题目中的卡牌是可以重复使用的,这个问题是一个典型的递归算法的问题,我在写非递归的实现但是还没有完全写对,感觉是不是思路不对了,如果有已经实现的还望不吝赐教,下面给出来递归方法的简单的实现:
#!usr/bin/env python
#encoding:utf-8'''
__Author__:沂水寒城
功能:python实现卡牌组合
'''def deep(num_list,pos,score,m):'''递归'''if score==m:return 1elif m-score<num_list[pos]:return 0else:count=0for i in range(0,(m-score)/num_list[pos]+1):count+=deep(num_list, pos+1, score+i*num_list[pos],m)print '-----------------i={0}, count={1}-----------------------------'.format(i,count)print 'deep({0},{1},{2},{3})'.format(num_list, pos+1, score+i*num_list[pos],m)return count def puke(m):'''组合卡牌'''num_list=[]for i in range(1,18):num_list.append(i*i)return deep(num_list,0,0,m)if __name__ == '__main__':#m=int(raw_input())#puke(m)for one in [11,20,100,177,200]:print '达到攻击力{0},卡牌组合方式为:{1}'.format(one, puke(one))
结果如下:
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],3,0,11)
-----------------i=1, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],3,9,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,0,11)
-----------------i=1, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,4,11)
-----------------i=2, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,8,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,0,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],3,1,11)
-----------------i=1, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],3,10,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,1,11)
-----------------i=1, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,5,11)
-----------------i=2, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,9,11)
-----------------i=1, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,1,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],3,2,11)
-----------------i=1, count=1-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],3,11,11)
-----------------i=0, count=1-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,2,11)
-----------------i=1, count=1-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,6,11)
-----------------i=2, count=1-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,10,11)
-----------------i=2, count=1-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,2,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,3,11)
-----------------i=1, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,7,11)
-----------------i=2, count=1-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,11,11)
-----------------i=3, count=2-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,3,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,4,11)
-----------------i=1, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,8,11)
-----------------i=4, count=2-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,4,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,5,11)
-----------------i=1, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,9,11)
-----------------i=5, count=2-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,5,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,6,11)
-----------------i=1, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,10,11)
-----------------i=6, count=2-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,6,11)
-----------------i=0, count=0-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,7,11)
-----------------i=1, count=1-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],2,11,11)
-----------------i=7, count=3-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,7,11)
-----------------i=8, count=3-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,8,11)
-----------------i=9, count=3-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,9,11)
-----------------i=10, count=3-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,10,11)
-----------------i=11, count=4-----------------------------
deep([1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289],1,11,11)
达到攻击力11,卡牌组合方式为:4
由于结果巨大,用8GB的内存跑居然死机了几分钟,结果也没办法全部粘贴仅仅粘贴第一个
下面是去除递归过程打印的结果:
达到攻击力11,卡牌组合方式为:4
达到攻击力20,卡牌组合方式为:12
达到攻击力100,卡牌组合方式为:1116
达到攻击力177,卡牌组合方式为:14607
达到攻击力200,卡牌组合方式为:27482
[Finished in 1.7s]
递归问题学习二之卡牌组合问题相关推荐
- 我用python玩炉石传说(3)-----炉石卡牌套牌自动构建算法
本文共三个部分: 我用python玩炉石传说(1)-----炉石卡牌相关度分析的手动打分器 我用python玩炉石传说(2)-----炉石卡牌套牌爬取器及自动分析卡牌相关度 我用python玩炉石传说 ...
- 卡牌游戏战斗系统的设计和实现二
卡牌游戏战斗系统的设计和实现二 http://www.lxway.com/4418844614.htm 在一篇文章中,我更多的是从游戏理论的角度,讨论了战斗的系统的设计.这篇文章中,我将从程序的角度, ...
- 冒险、卡牌、养成类游戏的设计要点
这几种游戏设计好玩的关键点是: 一.收集 游戏中设计1个主要收集项目,如卡牌本身就是一个很好的收集项目;1-2个次要收集项目,如道具.装备.技能等.主要的收集项目在于游戏的UI等引导用户去收集,并且存 ...
- 卡牌链游“诸神之战”攻略
Gods Unchained 是一款根据以太坊区块链上TCG游戏,它吸取了从<炉石>(Hearthstone).<MTG>(MTG)和<费利亚>(Fearia)等游 ...
- 上线4年从畅销Top 200到Top 20,这款刀塔传奇like卡牌正在美国市场逆流而上
这个品类也许正在迎来新的机会. 欧美玩家对卡牌玩法的热情不高,这是几年前业内早就经历过的文化.市场差异. 当然,我们这里讨论的卡牌手游不是TCG/CCG这类有线下桌游基础的游戏.而是推图过关养成类型的 ...
- 【BZOJ4205】卡牌配对
Description 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值互质,且 ...
- 算法题 - 卡牌游戏问题 - Python
问题描述: 卡牌游戏问题 小a和小b玩一个游戏,有 n张卡牌,每张上面有两个正整数 x, y.取一张牌时,个人积分增加 x,团队积分增加 y.求小a,小b各取若干张牌,使得他们的 个人积分相等,且 ...
- 基于QT开发的开源局域网联机UNO卡牌游戏报告(附github仓库地址)
源代码: https://github.com/yunwei37/UNO-game-oop 目录 1. 需求分析 1.1. UNO卡牌游戏的基本功能 1.2. UNO卡牌游戏的规则 2. 总体设计 3 ...
- 在WebGL场景中管理多个卡牌对象的实验
这篇文章讨论如何在基于Babylon.js的WebGL场景中,实现多个简单卡牌类对象的显示.选择.分组.排序,同时建立一套实用的3D场景代码框架.由于作者美工能力有限,所以示例场景视觉效果可能欠佳,本 ...
- 计算机卡牌培养游戏,浅谈冒险游戏、卡牌游戏、养成游戏的几个设计要点
badland-1.jpg (71.19 KB, 下载次数: 16) 2016-1-26 11:56 上传 这几种游戏设计好玩的关键点是: 1.收集:游戏中设计1个主要收集项目,如卡牌本身就是一个很好 ...
最新文章
- Go学习之-用vscode写go代码遇到的问题
- asp.net UrlRewrite 技术的实现
- Java连接数据库(4)
- (多线程)leetcode1195. 交替打印字符串 最简单解法一个变量搞定
- LeetCode 310. 最小高度树(图 聪明的BFS,从外向内包围)
- MongoDB学习之在Windows下安装MongoDB
- Python综合练习:学生信息管理(文件版)
- 触动精灵mysql用法_[触动精灵]触动精灵官方手册流水账2
- Js执行机制——同步和异步
- stm32变量放在flash_STM32 使用 Flash 存储数据时的一种管理办法
- 嵌入式单片机知识点汇总(持续更)
- [树剖]月下“毛景树”
- 计算机桌面出现临时文件,如何删除电脑中的临时文件 电脑屏幕一键放大方法分享...
- 机器学习----矩估计方法
- 技巧:彻底删除电脑弹窗广告,还你一个干净的桌面!
- win10如何修改mac地址(亲测通过)
- 威胁快报|首爆,新披露Jenkins RCE漏洞成ImposterMiner挖矿木马新“跳板”
- 关于hive异常:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStor
- “厚德载物”是哪几德,做事先学做人
- 大学阶段总结——大四