搜狗16招聘机试题 加密解密算法

阅读: 评论:0

搜狗16招聘机试题 加密解密算法

搜狗16招聘机试题 加密解密算法

题目:下面程序中,shuffle函数用于把整数数列打散,函数参数seed是一个随机种子,同一个随机种子产生一个确定的随机序列。请为shuffle写一个还原函数(restore)。其输入是经过shuffle打散的整数数列a[]以及打散时使用的随机种子seed,功能时将a[]数列还原为打散前的内容。
注意:本题要求额外空间开销越小越好,时间复杂度相对不重要。
输入:seed N 数值1 数值2 …. 数值N
输出:succeed!或者Failed!

代码:

#include <stdlib.h>
#include <stdio.h>
#include <stack>
using namespace std;void shuffle(int a[], size_t n, unsigned int seed)
{srand(seed);for (; n > 1; n--){unsigned int r = rand()%n;  //注意此处求余的n在变化int tmp = a[n - 1];a[n - 1] = a[r];a[r] = tmp;}
}void restore(int a[], size_t n, unsigned int seed)
{stack<unsigned int> istack;unsigned int r;srand(seed);for (int i = n; i >1; --i)      //先记录下随机序列{r = rand()%i ;          istack.push(r );}for (int i=1;i< n;++i)          //逆序解密{int tmp = a[i];r = p();a[i] = a[r];a[r] = tmp;istack.pop();}
}int main(void)
{unsigned int seed;unsigned int n;unsigned int i;int *a, *b;scanf("%u", &seed);scanf("%u", &n);a = (int *)malloc(sizeof *a * n);b = (int *)malloc(sizeof *b * n);for (i = 0; i < n; i++){scanf("%d", &a[i]);b[i] = a[i];}shuffle(a, n, seed);restore(a, n, seed);for (i = 0; i < n; i++){if (a[i] != b[i])break;}if (i == n)printf("Success!n");elseprintf("Failed!n");free(a);free(b);return 0;
}

测试结果:

本文发布于:2024-01-29 02:45:52,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170646755712146.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:搜狗   算法   试题   加密解密
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23