北理工乐学H:洗牌(选作)
H:洗牌(选作)
成绩 | 5 | 开启时间 | 2022年11月21日 星期一 08:00 |
折扣 | 0.8 | 折扣时间 | 2022年12月31日 星期六 23:55 |
允许迟交 | 否 | 关闭时间 | 2022年12月31日 星期六 23:55 |
假设我们有 2n 张牌,它们以 1, 2, ..., n, n+1, ..., 2n 编号并在开始时保持着这种顺序。一次洗牌就是将牌原来的次序变为 n+1, 1, n+2, 2, ..., 2n, n,也就是将原来的前 n 张牌放到位置 2, 4, ..., 2n,并且将余下的 n 张牌按照他们原来的次序放到奇数位置 1, 3, ..., 2n-1。已经证明对于任何一个自然数 n,这 2n 张牌经过一定次数的洗牌就回到原来的次序。但我们不知道对于一个特定的 n,需要几次洗牌才能将牌洗回原来的次序。
输入:
牌张数的一半n,即初始情况下一共有2n张牌,n为int型整数
输出:
将牌洗回原来的次序所需要的洗牌次数
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 |
以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 2 |
以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 3 |
以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 4 |
以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 5 |
以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 6 |
以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
测试用例 7 |
以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
第一种方法:将所有牌视作一个数组,将牌数初始化为牌的位置,对所有牌进行变换直到复原。
int main(void)
{int n, cnt = 0;scanf("%d", &n);int *brand1, *brand2;brand1 = (int*)malloc((2 * n + 1) * sizeof(int));brand2 = (int*)malloc((2 * n + 1) * sizeof(int));/*动态数组*/for (int i = 1; i <= 2 * n; i++)brand1[i] = i;/*初始化*/do{cnt++;for (int i = 1; i <= n; i++)/*一次洗牌*/{brand2[2 * i] = brand1[i];brand2[2 * i - 1] = brand1[n + i];}memcpy(brand1, brand2, (2 * n + 1) * sizeof(int));/*滚动数组思想*/} while (brand1[1] != 1);free(brand1);free(brand2);printf("%d\n", cnt);return 0;
}
*注:动态数组在数组大小受变量影响时(尤其是这题的情况,数组大小可以很小,也可以很大)很好用,否则至少要写成brand[20001],很占用空间。
第二种方法:只考虑一张牌的位置,只要最后这一张牌回到原位即可。显然这种方法运行更快,占用内存少得多。
#include <stdio.h>
int main()
{int n = 0;scanf("%d",&n);int count = 0;for (int i = 1; i <= 2*n; count++){if (i < n + 1)i *= 2;elsei=(i - n)*2-1;if (i == 1)break;}printf("%d\n", ++count);return 0;
}
本人C语言菜鸟一枚,代码不当或可以改进的地方欢迎大家讨论交流。
北理工乐学H:洗牌(选作)相关推荐
- 北理工乐学C语言 47. 【大学】北理工的恶龙
背景:最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙.要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的 ...
- 北理工乐学 42. 五年级小学生的题目
42. 五年级小学生的题目 成绩 5 开启时间 2022年10月24日 星期一 08:00 折扣 0.8 折扣时间 2022年11月13日 星期日 23:55 允许迟交 否 关闭时间 2022年11月 ...
- 北理工乐学C语言 60.合并排序
60.合并排序 成绩 0 开启时间 2022年11月7日 星期一 08:00 折扣 0.8 折扣时间 2022年11月27日 星期日 23:35 允许迟交 否 关闭时间 2022年12月4日 星期日 ...
- 北理工乐学C语言 49.扫雷
49. 扫雷 背景 你玩儿过扫雷游戏吧?有个操作系统中带了这个小游戏,那个系统叫什么来着?;-)在游戏中要想过关,就必须要在一个 NxM 的区域上找出所有的地雷.游戏过程中,计算机会在地图上显示一些数 ...
- 北理工乐学68.恭喜发财 利是窦来
68. 恭喜发财 利是窦来 成绩 5 开启时间 2022年11月21日 星期一 08:00 折扣 0.8 折扣时间 2022年12月18日 星期日 23:55 允许迟交 否 关闭时间 2022年12月 ...
- 北理乐学c语言基础答案晕,北理乐学C语言答案.doc
北理乐学C语言答案.doc 7.入门 计算圆柱的侧面积及体积 include void main double a,b; scanf"lfnlf", printf"s.2 ...
- 北理工在线作业计算机的主要特点是( ),北理工18秋《计算机组成原理》在线作业【答案】...
北理工<计算机组成原理>在线作业-0002 试卷总分:100 得分:0 一. 单选题 (共 30 道试题,共 60 分) 1.动态RAM是指() A.工作中存储内容动态变化 B.工作 ...
- 关于洗牌的研究(六)——从数学到魔术之完美洗牌
爱学习,勤思考:学数学,玩魔术.欢迎点击头部蓝字关注MatheMagician,这里有你要的奇迹! 写再前面:本系列作品由MathMagician独家首发,一共有七篇,从数学和魔术两个角度对日常生活中 ...
- 洗牌、发牌算法 (打乱扑克牌顺序)
#include <stdio.h> #include <stdlib.h> #include <time.h> int d[6]; int i,n,a,b ...
最新文章
- 机器视觉应用软件开发步骤及流程
- 一.jquery.datatables.js表格显示
- oracle中的一些基本概念
- ROS系统 参数的获取和设置
- AcWing - 113 特殊排序(归并排序/二分)
- python中print是什么意思_python中print什么意思
- Python文件操作-文件的增删改查
- Axis2搭建WebService服务
- 信息学奥赛一本通(1186:出现次数超过一半的数)
- 化工计算机软件基础考试题,2013年化工工程师基础知识网友版真题(下午卷)...
- lua mysql 事务_为什么在 Redis 实现 Lua 脚本事务?-阿里云开发者社区
- C# delegate ,Action,Func
- HTML5-打字游戏
- 各种电子元器件介绍与电路基础作用
- 灰狼/狼群算法优化支持向量机SVM分类预测matlab代码,支持多分类。 Excel数据格式 ,直接运行 。
- Vue项目中使用xlsx实现批量导入导出功能
- python出现无法定位序数于动态链接库ssleay32.dll的问题
- iOS小技能: 自定义相机(基础知识储备)
- JavaScript Window窗口对象
- 小公司需要企业邮箱么?小企业用什么企业邮箱?
热门文章
- 解决jquery版本过低引发的XSS跨站安全漏洞
- 淘宝关键词搜索商品API
- 教大家电脑重装系统后如何设置硬盘密码
- zip gzip 7z 简单比较
- ORBSLAM-Atlas
- 外资企业申请互联网信息服务经营许可证ICP注意事项有哪些?
- 文件上传漏洞 随便贴一个实战演示 BUU Upload(文件上传,过滤后缀,另类一句话) write up
- 生意参谋 市场大盘(2021-05)
- python中max函数用法_python3 内置函数——max()函数
- 使用Java语言搭建一个简易的局域网直播(live)系统