惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
量子位
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
爱范儿
爱范儿
博客园 - 【当耐特】
Vercel News
Vercel News
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
博客园 - 叶小钗
博客园_首页
V
Visual Studio Blog
宝玉的分享
宝玉的分享
B
Blog
MyScale Blog
MyScale Blog
C
Check Point Blog
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
V
V2EX

酷 壳 – CoolShell

感染新冠的经历 | 酷 壳 - CoolShell 从一次经历谈 TIME_WAIT 的那些事 | 酷 壳 - CoolShell 网络数字身份认证术 | 酷 壳 - CoolShell 我做系统架构的一些原则 | 酷 壳 - CoolShell 源代码特洛伊木马攻击 | 酷 壳 - CoolShell Go编程模式 : 泛型编程 | 酷 壳 - CoolShell 如何做一个有质量的技术分享 | 酷 壳 - CoolShell Go 编程模式:k8s Visitor 模式 | 酷 壳 - CoolShell Go编程模式:Pipeline | 酷 壳 - CoolShell Go编程模式:委托和反转控制 | 酷 壳 - CoolShell Go 编程模式:Go Generation | 酷 壳 - CoolShell Go编程模式:Map-Reduce | 酷 壳 - CoolShell Go 编程模式:错误处理 | 酷 壳 - CoolShell Go编程模式:切片,接口,时间和性能 | 酷 壳 - CoolShell 百度为什么掉队了 | 酷 壳 - CoolShell 程序员如何把控自己的职业 | 酷 壳 - CoolShell 计时攻击 Timing Attacks | 酷 壳 - CoolShell Rust语言的编程范式 | 酷 壳 - CoolShell HTTP的前世今生 | 酷 壳 - CoolShell 记一次Kubernetes/Docker网络排障 | 酷 壳 - CoolShell 可视化编程 | 酷 壳 - CoolShell 程序的本质复杂性和元语言抽象 | 酷 壳 - CoolShell 伙伴分配器的一个极简实现 | 酷 壳 - CoolShell C++11的Lambda使用一例:华容道求解 | 酷 壳 - CoolShell C++面试中string类的一种正确写法 | 酷 壳 - CoolShell C++模板”>>”编译问题与词法消歧设计 | 酷 壳 - CoolShell 数据即代码:元驱动编程 | 酷 壳 - CoolShell 数据的游戏:冰与火 | 酷 壳 - CoolShell 7个示例科普CPU Cache | 酷 壳 - CoolShell 加班与效率 | 酷 壳 - CoolShell
【问题】传球问题 | 酷 壳 - CoolShell
cui · 2009-12-20 · via 酷 壳 – CoolShell
  1. 60吧?(3×3×3×3-(3×3+3×2×2))

  2. 60?

  3. 60 (星号代表b or c or d)
    a -* -* -* -* -a 3*2*2*2 = 24
    a -* -a -* -* -a 3*3*2 = 18
    a -* -* -a -* -a 3*2*3 = 18
    60

  4. def chuanqiu(current,remain):
    if remain==0:
    if current==’A’:
    return 1
    else:
    return 0
    else:
    return sum(chuanqiu(next,remain-1) for next in [‘A’,’B’,’C’,’D’] if next != current)

    >>> chuanqiu(‘A’,5)
    60
    >>>

  5. 问题等价于经过4次传球后不在a手里, 总共有多少种传球的方法.

  6. //将上面的Python用C再写了一遍
    #include

    int cb(char cu, int t)
    {
    char s[4] = {‘a’,’b’,’c’,’d’};
    if (t == 0) {
    if (cu == ‘a’)
    return 1;
    else
    return 0;
    }
    else {
    int co = 0;
    char ccuu;
    for (int i=0;i<4;i++) {
    ccuu = s[i];
    if(ccuu != cu)
    co += cb(ccuu, t-1);
    }
    return co;
    }

    }

    int main()
    {
    for(int i=1; i<10; i++){
    printf("%d\n",cb('a',i));
    }

    return 0;
    }

  7. 确实是60,赞楼上各种解法。。。

  8. 新作者?

  9. 前面四次总共有3*3*3*3种传法,但当第四次传到a手中时,第五次就肯定不在a手中,因为a不能传给a自己。所以第五次传给a的总数就是前面四次的总数减去第四次传给a的总数,这样就形成了一个递归。
    假设f(i)为第i次传给a的传法总数,那么
    f(i)=pow(3,i-1)-f(i-1) 且 f(1)=0
    所以
    f(5) = pow(3,4) – f(4) = 81 – (pow(3,3)-f(3)) = … = 60

  10. 好吧,那我直接给公式吧:m个人,传n次(m,n>=3),方法共计((m-1)^n+(-1)^n*(m-1))/m.

  11. 都是牛人,学习了。

  12. 1 #!/usr/bin/php
    2 “.$target;
    10 $str = $str.” => $target”;
    11 if( $index == 5 ) {
    12 if( $target == $end ) {
    13 $count++;
    14 echo $str;
    15 }
    16 echo “\n”;
    17 return;
    18 }
    19 foreach( $pArray as $p ) {
    20 if( $target == $p ) continue;
    21 pass_ball( $target , $p , $end , $index , $str );
    22 }
    23 }
    24 foreach( $pArray as $p ) {
    25 if( $p == “a” ) continue;
    26 pass_ball( ‘a’ , $p , ‘a’ , 0 , “” );
    27 }
    28 echo $count.”\n”;
    29 ?>

  13. #!/usr/bin/php
    “.$target;
    $str = $str.” => $target”;
    if( $index == 5 ) {
    if( $target == $end ) {
    $count++;
    echo $str;
    }
    echo “\n”;
    return;
    }
    foreach( $pArray as $p ) {
    if( $target == $p ) continue;
    pass_ball( $target , $p , $end , $index , $str );
    }
    }
    foreach( $pArray as $p ) {
    if( $p == “a” ) continue;
    pass_ball( ‘a’ , $p , ‘a’ , 0 , “” );
    }
    echo $count.”\n”;
    ?>
    ~

  14. #!/usr/bin/php
    “.$target;

  15. $pArray = array( ‘a’ , ‘b’ , ‘c’ , ‘d’ );
    $count=0;
    function pass_ball( $start , $target , $end , $index , $str ) {
    global $pArray;
    global $count;
    $index = $index + 1;
    if( $index == 1 ) $str = $start.” => “.$target;
    $str = $str.” => $target”;
    if( $index == 5 ) {
    if( $target == $end ) {
    $count++;
    echo $str;
    }
    echo “\n”;
    return;
    }
    foreach( $pArray as $p ) {
    if( $target == $p ) continue;
    pass_ball( $target , $p , $end , $index , $str );
    }
    }
    foreach( $pArray as $p ) {
    if( $p == “a” ) continue;
    pass_ball( ‘a’ , $p , ‘a’ , 0 , “” );
    }
    echo $count.”\n”;
    ?>

  16. 妈的 php的标签头传不上去

  17. 10楼的loonsw,能解释一下这个公式吗?
    3楼的jx_world,我和你的思路一样,不过你的答案可真简洁清晰

  18. 10楼的胡扯什么呢 写的什么东西

  19. F(n) = 3^(n-1) – F(n-1)
    初值:F(2)= 3

    解得:F(n) = 3*( 3^(n-1) + (-1)^n) / 4; 其中n大于等于2

  20. @sunshine
    考公务员的都擅长这类公式的。。 我们码农自然不知道是什么东西

  21. 我的解法不佳啊

  22. public class TT {
    private static int NX(int N, int x) {
    int result = 1;
    while(x– > 0)
    result *= N;
    return result;
    }

    public static int NotA(int n) {
    if(n == 0)
    return 0;
    return NX(3, n) – NotA(n – 1);
    }

    public static void main(String[] args) {
    System.out.println(NotA(5 – 1));
    }
    }

  23. 192

  24. 54

  25. 容斥原理,a 3 3 3 3 a,(三种情况),排除a 3 3 3 a a,多排除了a 3 3 a a a,以此类推,
    3^4 – 3^3 + 3^2 – 3^1,
    边界考虑:a 3 a时: 3^1 (不是3^1 – 3^0);
    结果就是60了!

  26. F(n) = 3F(n-2) + 2F(n-1),其中F(0) = 1,F(1) = 0

  27. 前几年的NOIP普及组题目

  28. “`python
    >>> from numpy import *
    >>> a = array([[0,1,1,1],[1,0,1,1],[1,1,0,1],[1,1,1,0]])
    >>> b = matrix_power(a, 5)
    >>> b
    array([[60, 61, 61, 61],
    [61, 60, 61, 61],
    [61, 61, 60, 61],
    [61, 61, 61, 60]])
    “`
    60 种