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

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

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

【精品干货】C语言----密码概率分布_第1张图片

7105(编号: 悟空)20381

【运行效果】

【精品干货】C语言----密码概率分布_第2张图片

【代码】

#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语言----密码概率分布)