2021-07-21:一张扑克有3个属性,每种属性有3种值(A、B、C),比如“AAA“,第一个属性值A,第二个属性值A,第三个属性值A,比如“BCA“,第一个属性值B,第二个属性值C,第三个属性值A
2021-07-21:一张扑克有3个属性,每种属性有3种值(A、B、C),比如"AAA",第一个属性值A,第二个属性值A,第三个属性值A,比如"BCA",第一个属性值B,第二个属性值C,第三个属性值A。给定一个字符串类型的数组cards[],每一个字符串代表一张扑克,从中挑选三张扑克,一个属性达标的条件是:这个属性在三张扑克中全一样,或全不一样,挑选的三张扑克达标的要求是:每种属性都满足上面的条件。比如:“ABC”、“CBC”、“BBC”,第一张第一个属性为"A"、第二张第一个属性为"C"、第三张第一个属性为"B",全不一样;第一张第二个属性为"B"、第二张第二个属性为"B"、第三张第二个属性为"B",全一样;第一张第三个属性为"C"、第二张第三个属性为"C"、第三张第三个属性为"C",全一样;每种属性都满足在三张扑克中全一样,或全不一样,所以这三张扑克达标。返回在cards[]中任意挑选三张扑克,达标的方法数。
福大大 答案2021-07-26:
时间紧。思路见代码。
代码用golang编写。代码如下:
import (
"container/list"
"fmt"
)
func main() {
cards := []string{"ABC", "AAC", "ACC"}
ret := ways2(cards)
fmt.Println(ret)
}
func ways2(cards []string) int {
counts := make([]int, 27)
for _, s := range cards {
counts[(s[0]-'A')*9+(s[1]-'A')*3+(s[2]-'A')*1]++
}
ways := 0
for status := 0; status < 27; status++ {
n := counts[status]
if n > 2 {
ways += twoSelectOne(n == 3, 1, n*(n-1)*(n-2)/6)
}
}
path2 := list.New().Init()
for i := 0; i < 27; i++ {
if counts[i] != 0 {
path2.PushBack(i)
ways += process2(counts, i, path2)
path2.Remove(path2.Back())
}
}
return ways
}
func twoSelectOne(c bool, a int, b int) int {
if c {
return a
} else {
return b
}
}
// 之前的牌面,拿了一些 ABC BBB ...
// pre = BBB
// ABC ...
// pre = ABC
// ABC BBB CAB
// pre = CAB
// 牌面一定要依次变大,所有形成的有效牌面,把方法数返回
func process2(counts []int, pre int, path2 *list.List) int {
if path2.Len() == 3 {
return getWays2(counts, path2)
}
ways := 0
for next := pre + 1; next < 27; next++ {
if counts[next] != 0 {
path2.PushBack(next)
ways += process2(counts, next, path2)
path2.Remove(path2.Back())
}
}
return ways
}
func getWays2(counts []int, path2 *list.List) int {
v1 := path2.Front().Value.(int)
v2 := path2.Front().Next().Value.(int)
v3 := path2.Front().Next().Next().Value.(int)
for i := 9; i > 0; i /= 3 {
cur1 := v1 / i
cur2 := v2 / i
cur3 := v3 / i
v1 %= i
v2 %= i
v3 %= i
if (cur1 != cur2 && cur1 != cur3 && cur2 != cur3) || (cur1 == cur2 && cur1 == cur3) {
continue
}
return 0
}
v1 = path2.Front().Value.(int)
v2 = path2.Front().Next().Value.(int)
v3 = path2.Front().Next().Next().Value.(int)
return counts[v1] * counts[v2] * counts[v3]
}
执行结果如下:

2021-07-21:一张扑克有3个属性,每种属性有3种值(A、B、C),比如“AAA“,第一个属性值A,第二个属性值A,第三个属性值A,比如“BCA“,第一个属性值B,第二个属性值C,第三个属性值A的更多相关文章
- 2021.07.21 NPCBOT增加人类的SS和74
#ssinsert into `creature_template_npcbot_appearance`(`entry`,`name*`,`gender`,`skin`,`face`,`hair`,` ...
- 2021.12.21 eleveni的刷题记录
2021.12.21 eleveni的刷题记录 0. 有意思的题 P6701 [POI1997] Genotype https://www.luogu.com.cn/problem/P6701 状压优 ...
- 2021.07.09 K-D树
2021.07.09 K-D树 前置知识 1.二叉搜索树 2.总是很长的替罪羊树 K-D树 建树 K-D树具有二叉搜索树的形态,对于每一个分类标准,小于标准的节点在父节点左边,大于标准的节点在父节点右 ...
- 2021.07.26 P1010 幂次方(数论)
2021.07.26 P1010 幂次方(数论) [P1010 NOIP1998 普及组] 幂次方 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.二进制 题意: 用20 ...
- 2021.07.23 P2474 天平(差分约束)
2021.07.23 P2474 天平(差分约束) [P2474 SCOI2008]天平 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 已知A,B和每两个点点权,求点权i, ...
- 2021.07.23 P3275 糖果(差分约束)
2021.07.23 P3275 糖果(差分约束) [P3275 SCOI2011]糖果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.为了满足更多更多约束条件,合适地 ...
- 2021.07.19 BZOJ2654 tree(生成树)
2021.07.19 BZOJ2654 tree(生成树) tree - 黑暗爆炸 2654 - Virtual Judge (vjudge.net) 重点: 1.生成树的本质 2.二分 题意: 有一 ...
- 2021.07.17 P3177 树上染色(树形DP)
2021.07.17 P3177 树上染色(树形DP) [P3177 HAOI2015]树上染色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.dp思想是需要什么,维护 ...
- 设a、b、c均是0到9之间的数字,abc、bcc是两个三位数,且有:abc+bcc=532。求满足条件的所有a、b、c的值。
题目描述 设a.b.c均是0到9之间的数字,abc.bcc是两个三位数,且有:abc+bcc=532.求满足条件的所有a.b.c的值. 输入描述: 题目没有任何输入. 输出描述: 请输出所有满足题目条 ...
- Murano Weekly Meeting 2015.07.21
会议时间: 2015.07.21 主持人: Kirill Zaitsev, core from Mirantis 会议摘要: 1.murano client和murano dashboard升级到y ...
随机推荐
- 认识内存和Cache
认识内存和Cache 操作系统学习笔记,如有错误,还望指出. 我们有什么问题 什么是内存? 什么是Cache? 为什么需要Cache? 程序的局部性原理 这是个前置芝士点. 定义: 程序的局部性原理是 ...
- MyBatisPlus 自动填充演示
一.数据库 表中新增"添加时间"和"修改时间"字段:
- 网络----OSI七层
OSI 订制的是一个用于计算机或通信系统间互联的标准体质(一般称为OSI参考模型或七层模型) OSI 模型把网络通信的工作分为7层分别是: 常用内容:物理层 数据链层 网络层 注解 OSI 7层 1. ...
- 记录关于Chromium系浏览器密码安全问题的一些思考
首先就是在此之前就看到有相关报道讲到Chrome等浏览器密码都在本地明文存储,而且权限要求很低,任何程序都可以随意读取,这方面的安全问题暂且不表. 今天使用Edge时候发现浏览器储存的密码,在我已经设 ...
- 相同基准点的多个rvt BIM模型数据配准后位置有错位偏差问题处理
场景:提供的bim模型数据包含多个rvt格式数据,这些数据具有相同的基准点,如: 在使用ArcGIS Pro处理了其中两份rvt格式数据(建筑和给排水),发布后在前端展示发现数据错位: 红色管线的给排 ...
- AWS IAM介绍
前言 AWS是世界上最大的云服务提供商,它提供了很多组件供消费者使用,其中进行访问控制的组件叫做IAM(Identity and Access Management), 用来进行身份验证和对AWS资源 ...
- java -- static, 内部类, 权限, 参数传递
static关键字 static是静态修饰符,一般修饰成员.被static修饰的成员属于类,不属于单个这个类的某个对象.static修饰的成员被多个对象共享.static修饰的成员属于类,但是会影响每 ...
- 四月六号java基础学习
四月六号 1.今天学习了JAVA语言特点,有以下几个特点: 1)简单易学:相对于C/c++语言,java语言省去了指针(pointer).联合体(Unions)以及结构体(struct) 2)面向对象 ...
- C# 根据前台传入实体名称,动态查询数据
前言: 项目中时不时遇到查字典表等数据,只需要返回数据,不需要写其他业务,每个字典表可能都需要写一个接口给前端调用,比较麻烦,所以采用下面这种方式,前端只需传入实体名称即可,例如:SysUser 1. ...
- 【谷粒商城】(二)SpringCloudAlibaba分布式组件
微服务 分布式组件 注册中心:每一个微服务上线都应该注册到注册中心.这样做的好处在于方便微服务之间的相互调用,比如订单服务想要调用商品服务,就可以通过注册中心查看有哪几台主机的商品服务进行了注册,然后 ...