小蓝和小黄的密码锁(排列组合)

前几日,我在路上走着的时候,看着路边密密麻麻摆满了共享单车。时不时有两三人去扫码,解锁。我们这里有四种共享单车“摩拜单车,小黄车,小蓝单车和小鸣单车”。其中,小黄车和小蓝单车与其他两种不一样,其他车是扫码解锁,这两种是密码锁,而且还是两种不同的密码锁。

分别是这样的:


小黄车密码锁

和这样的:


小蓝单车密码锁

看到这两种锁,我就想,我最近在自学C语言编程,是否可以学以致用,写两个小小的程序来计算一下这两种锁分别有多少种密码的可能。

首先我们先做一个分析,这两种锁有什么不同呢?

  • 小黄车(ofo) 的锁是滚轮锁,密码为可互相重复的四位数
  • 小蓝单车(bluegogo) 的锁类似以前小时候密码日记本那种锁,一个数字只能按下去一次,一组密码中同样的数字不会出现两次,密码是不重复的四位数,并且同样四位数排序不同结果是相同的(组合)

其实很简单,心里一想就出来了,其实不就是从 '0001'-'9999' 种加上 '0000' 这种可能,共10000种。可是如何使用 c 语言写出来呢?

哈哈,只要枚举每一个位,并把每一种可能增加起来,就可以得到总数了,代码如下:

#include <stdio.h>

int main()
{
    int a, b, c, d;
    int total;

//枚举每一位数,得到一种可能,总数就加一
    for(a=0; a<=9; a++)
        for(b=0; b<=9; b++)
            for(c=0; c<=9; c++)
                for(d=0; d<=9; d++)
                    total++;

//下同 printf("ofo's password can have %d possibilities.\n",total);
    fprintf(stdout,"ofo's password can have %d possibilities.\n",total);
    return 0;
}

程序输出:

Ofo's password can have 10000 possibilities.

小黄车的这个简单,小蓝单车的就不好做了,虽然学过排列组合的都可以口算出来,可是到了程序里,怎么去重是一个难题。让我们先看两个公式:

组合公式
排列公式

我们可以根据这个公式来计算小蓝单车的密码可能性。小蓝单车的密码是四位不重复的密码,并且同四位数排序不同结果一样,这其实就是数学中的“组合”。

根据公式,我写出以下代码:

#include <stdio.h>

int main()
{
    int a, b, c, d;
    int up, down;
    int n, m;
    int total;

    up = down = n = m = total =0;//初始化

    //按照公式,我们要先算出10选4的全排列
    for(a=0; a<=9; a++)
        for(b=0; b<=9; b++)
            for(c=0; c<=9; c++)
                for(d=0; d<=9; d++)
                    //注意这里是全排列,一个数字在一组中只能出现一次,所以需要 个十百千 各不相等
                    if(a!=b && a!=c && a!=d &&
                                b!=c && b!=d &&
                                         c!=d)
                    {
                        up++;
                    }
    
    //接着算出4选4的全排列
    down = 1;
    for(n=4; n>=1; n--)
        down = down*n;

    //最后把『10选4』除以『4选4』,就能得出结果
    total = up/down;

    printf("A(4,10) = %d\nA(4,4)  = %d\n",up,down);
    printf("Bluegogo's password can have %d possibilities.",total);

    return 0;
}

程序输出:

A(4,10) = 5040
A(4,4)  = 24
Bluegogo's password can have 210 possibilities.

好啦,两种单车锁的密码可能性都算出来了,小蓝单车那种锁拥有 210 种密码,而小黄车的那种滚轮锁拥有 10000 种密码,相比之下还是小黄车的密码锁安全一点。可是我发现有非常多的共享单车都被破坏,加私锁,拆锁。。。。。。

在此,我想呼吁大家爱惜共享单车。共享单车给了我们便利,让我们大家一起爱护它们,让它们更好的为我们服务_

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 共享单车业界两大巨头,为了避免软文嫌疑,让我们称之为小黄车和小桔车。 在市场竞争的初期,或者说蓝海扩张期,黄桔二者...
    昊昊爸阅读 1,472评论 1 3
  • 共享单车是指企业在校园、地铁站点、公交站点、居民区、商业区、公共服务区等提供自行车单车共享服务,是一种分时租赁模式...
    半岁PM阅读 5,864评论 1 7
  • 写在开头:产品设计是系统工程,不管表层的场景是多么简单,但背后的逻辑和流程千丝万缕,需要抽丝剥茧,从整体到细节,从...
    铲屎的胖子阅读 614评论 0 0
  • 类集成自UIControl再绑定一个XIB文件,XIB文件中可以进行布局存在不能交互的问题 修改之前 修改之后
    小丑不会笑阅读 258评论 0 0
  • 因为昨晚睡不好,今天工作好容易觉得累,觉得一直睡不够的感觉。整理费项科目的时候发现查不到的科目,与财务他们商量,他...
    mmwinme阅读 446评论 0 0