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 ... 
随机推荐
- 快速掌握Linux三剑客命令使用
			前言 Linux三剑客指的是grep.sed以及awk命令的使用,这三个命令功能异常强大,大到没朋友.grep命令主打"查找",sed命令主打"编辑",awk命 ... 
- Linux0.11源码学习(四)
			Linux0.11源码学习(四) linux0.11源码学习笔记 参考资料: https://github.com/sunym1993/flash-linux0.11-talk https://git ... 
- LGV算法  CodeForces 348D + 牛客多校 A Monotonic Matrix
			定理(Lindström–Gessel–Viennot lemma)很简单: 学的时候忘了大的行列式怎么算的了.. 然后就可以写题了: 第一道:CodeForces-348D(链接https://vj ... 
- cost function 成本函数
			cost function 成本函数 cost function-成本函数 1.目标 :实现和探索具有一个变量的线性回归的成本函数. import numpy as np %matplotlib wi ... 
- Maven 的仓库、周期和插件
			一.Maven 仓库 在 Maven 的世界中,任何一个依赖.插件或者项目构建的输出,都可以称为构建.Maven 在某个统一的位置存储所有项目的共享的构建,这个统一的位置,我们就称之为仓库.任何的构建 ... 
- python3各数据类型的常用方法
			python3数据类型包括: 数字.字符串str.列表list.元组tuple.字典dict.集合set.布尔bool 1.字符串(str)-可变-用"".''定义 (1)uppe ... 
- [数据库/Linux]CentOS7安装MySQL Percona版(RPM方式)
			OS: CentOS7 (x86_64) MySQL: MySQL Percona 5.7.31-34 0 前置条件 已配置完成YUM源 已卸载先前可能安装的MySQL rpm -qa | grep ... 
- mysql 命令批量修改一个字段/帝国cms sql命令修改一个字段
			UPDATE phome_enewstagsdata SET classid=5 where classid=1 UPDATE phome_ecms_news SET classid=8 where ... 
- Java与Mysql锁相关知识总结
			锁的定义 在计算机程序中锁用于独占资源,获取到锁才可以操作对应的资源. 锁的实现 锁在计算机底层的实现,依赖于CPU提供的CAS指令(compare and swsp),对于一个内存地址,会比较原值以 ... 
- 基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
			2023年目前要说最热的点,肯定是ChatGPT了. ChatGPT官方提供的网页版本,还有需要科*上网,很多人都会基于此进行封装. 现在是移动互联网时代,基于手机APP的需求还是很大的. 所以,今天 ... 
