美文网首页C语言
【精品干货】C语言----密码概率分布

【精品干货】C语言----密码概率分布

作者: 悟空学编程 | 来源:发表于2018-04-28 19:06 被阅读0次

    将密码出现次数出现最多的排在前面。

    由于我这里没有什么裤子,所以就只能拿数组来模拟了。

    7105(编号: 悟空)20381

    【运行效果】

    【代码】

    #include

    #include

    #include

    #include

    #define N 30

    void main()

    {

    //定义一个动态数组

    int* Parr=(int*)malloc(sizeof(int)*N);

    //对动态数组元素清零

    memset(Parr, 0, sizeof(int)*N);

    //获取随机数种子

    srand((unsigned int)time(NULL));

    //对动态数组的每一个元素赋值

    for (int i = 0; i < N; i++)

    {

    Parr[i] = rand() % (N / 2)+1;

    }

    //显示动态数组状态

    for (int i = 0; i < N; i++)

    {

    printf("%5d", Parr[i]);

    if (0==(i + 1) % 5)

    {

    puts("");

    }

    }

    //对动态数组进行排序

    for (int i = 0; i < N - 1; i++)

    {

    for (int j = 0; j < N - 1 - i; j++)

    {

    if (Parr[j] >= Parr[j + 1])

    {

    //数据交换

    int Temp = Parr[j];

    Parr[j] = Parr[j + 1];

    Parr[j + 1] = Temp;

    }

    }

    }

    puts("");

    //显示动态数组状态

    for (int i = 0; i < N; i++)

    {

    printf("%5d", Parr[i]);

    if (0==(i + 1) % 5 )

    {

    puts("");

    }

    }

    //定义一个结构体类型

    struct PassWord

    {

    int Num;

    int Counter;

    };

    //定义一个动态结构体数组

    struct PassWord* PW = (struct PassWord*)malloc(sizeof(struct PassWord)*N);

    //对结构体数组清零

    memset(PW, 0, sizeof(struct PassWord)*N);

    //PWi 结构体数组的下标

    int PWi = 0;

    for (int i = 0; i < N; i++)

    {

    //将数组的元素赋值给结构体成员 PW[PWi].Num

    PW[PWi].Num = Parr[i];

    //统计 Parr[i] 出现的次数

    int Counter = 1;

    for (int j = i; j < N; j++)

    {

    //判断数组第 j 个元素是否等于第 j+1 个元素

    if (Parr[j] == Parr[j + 1])

    {

    Counter++;

    }

    else

    {

    i = j;

    break;

    }

    }

    //将统计的次数存放到结构体数组的 PW[PWi].Counter 成员中

    PW[PWi].Counter = Counter;

    //结构体数组下标前进

    PWi++;

    }

    //Ibreak 记录结构体数组的中断点

    int Ibreak = 0;

    for (int i = 0; i < N; i++)

    {

    if (0==PW[i].Counter )

    {

    Ibreak = i;

    break;

    }

    }

    //打印结构体数组的中断点

    printf("\n结构体数组的中断点 %d\n",Ibreak);

    //对结构体数组进行排序,将次数出现最多的排在前面

    for (int i = 0; i < Ibreak-1; i++)

    {

    for (int j = 0; j < Ibreak - 1 - i; j++)

    {

    if (PW[j].Counter <= PW[j + 1].Counter)

    {

    //数据交换

    int Temp = PW[j].Counter;

    PW[j].Counter = PW[j + 1].Counter;

    PW[j + 1].Counter = Temp;

    Temp = PW[j].Num;

    PW[j].Num = PW[j + 1].Num;

    PW[j + 1].Num = Temp;

    }

    }

    }

    puts("");

    //显示结构体数组状态

    for (int i = 0; i < Ibreak; i++)

    {

    printf("Num==%-5d Counter==%-5d\n", PW[i].Num, PW[i].Counter);

    }

    //释放为结构体指针数组分配的内存

    free(PW);

    //将结构体数组指针赋值为空,避免野指针

    PW = NULL;

    //释放为指针数组分配的内存

    free(Parr);

    //将动态数组指针赋值为空,避免野指针

    Parr = NULL;

    system("pause");

    }

    相关文章

      网友评论

        本文标题:【精品干货】C语言----密码概率分布

        本文链接:https://www.haomeiwen.com/subject/qsknlftx.html