《2022年随机全排列生成程序及其应用开发 .pdf》由会员分享,可在线阅读,更多相关《2022年随机全排列生成程序及其应用开发 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、(一)目的该部分内容是后面密码方案实现的基础,该程序主要是为了产生?全排列的随机数 ?。通过本部分内容使学生掌握一种以上产生今后在密码学中经常用到的随机全排列(可用作产生?代替表 ?或? 置换表 ?)的方法。(二)内容编制生成0n(n 255)的一个全排列的程序,可选择下列两个方法之一或自行设计另外方法:方法1:从一个随机文件读取n+1 字节数据d0,d1,? ,dn。由预先取定的一个0n 的全排列P(比如,可为0n 的自然排列)开始,依次对i=n,n-1,? ,1,计算: j=di-1+di(mod i)交换P 的第 i 项第 j 项(在此注意我们假定P 从第 0 项开始)。方法2:用一个随
2、机函数产生m(mn)字节数据d1,d2,? ,dm。对d1(mod(n+1),d2(mod(n+1),? ,dm(mod(n+1) 依次考察,把后面出现的与前相同者去掉;在最后剩下的数据中,把没有出现的0n 依序补写于后面。代码如下:给你两种不同的感谢我吧,哈哈1: #include stdio.h swap(int *pm,int *pn) int temp; temp =*pm; *pm=*pn; *pn=temp; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6
3、 页 - - - - - - - - - void main() int i; int a256; int n=256; int m; start: printf( n 此程序可产生范围在 0到255的随机数n ); printf( n 请输入你所需使用的随机数个数(不大于256):n ); scanf( %d ,&m); if( m n ) printf( n 输入数%d 比%d大,请重新输入! n ,m,n); goto start; srand( ( unsigned )time( NULL ) ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
4、- - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - for (i=0, i= 0; i- ) swap(&ai, &arand()%m+0); printf( -n 以下为产生的不重复的随机数:n ) ; for (i=0, i= m- 1, i+ ) printf( %dt ,ai ); 2: #include stdio.h #define N 256 char PN; char dN; char *full_array( int n) int i,j; 名师资料总结 - - -精品资料欢迎下载 - - - -
5、- - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - char filename20; FILE *fp; char temp; start: printf( n 请输入随机数据采样文件名:n ); scanf( %s ,filename); if(fp=fopen(filename, rb )=NULL) printf( 没有找到文件: %sn ,filename); goto start; fread(d,n +1,1,fp); fclose(fp); printf( n 原文件中的字母
6、序列如下 :); for (i=0,i= n,i+ ) if(i)%8=0) printf( n ); printf( d%d=%c ,i,di); printf( nn 取定自然排列如下 :); for (i=0;i 0,i- ) j=(di-1 +di)%i; temp =Pi; Pi=Pj; Pj =temp; return (P); void main() int num,i; printf( 输入要进行全排列的字母个数:n ); scanf( %d ,&num); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - full_array(num - 1); printf( nn 随机排列后的新排列为 :); for (i=0;i num;i+ ) if(i)%8=0) printf( n ); printf( %d(%c) ,i,dPi); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -