runxinzhi.com
首页
百度搜索
约瑟夫环,杀人游戏(静态循环链表实现)
觉得用静态循环链表最划算了。
1、动态链表要动态分配,指针移来移去,释放指针等等,弄得很烦,容易出错。
2、用循环链表是当然的了。
// DS: 似循环静态链表 #include <iostream> #include <cstdio> //#include <cstdlib> using namespace std; int Kill_You( const int sum = 1, const int distance = 1, const int start = 1) { // 一共参加自杀的人数有 sum 个,每 distence 个人就杀一个,从第 start 个人开始报数; // 返回留下的那个人的位序 int pi = start - 1; int pj = 0; int *S = (int *)malloc( sum * sizeof(int) ); //不设头结点 if (!S) cout << "Error!" << endl; for (int i = 0; i < sum; i++) // 为人编号,第一个人为0 S[i] = i + 1; S[sum - 1] = 0; // 尾结点与首元结点接上 cout << "依次杀掉:" << endl; for (int count1 = sum - 1; count1--; ) { for (int count2 = distance - 1; count2--; ) { pj = pi; // pj跟踪pi,以便删除结点 pi = S[pi]; } cout << pi + 1 << ' '; // 杀掉下标是pi的那个人,即删除该结点 S[pj] = S[pi]; // pj是pi的前一个值 pi = S[pi]; } free(S); cout << endl; return pi + 1; } int main() { int s; // s 表示总人数 int d; // d 表示每d个人就杀掉一个(杀掉说出d的那个人) int k; // k 表示第k个人开始报数 while (1) { cout << "请输入人数(正整数):" << endl; cin >> s; cout << "请输入报数(正整数):" << endl; cin >> d; cout << "从第几个人开始报数:" << endl; cin >> k; printf( "留下第%d个人\n\n", Kill_You (s, d, k) ); } return 0; }
p.s. 没事多写写注释,挺好。
相关阅读:
js函数——倒计时模块+无缝滚动
一步步编写avalon组件02:分页组件
mvc5+ef6+Bootstrap 项目心得--身份验证和权限管理
只用css实现“每列四行,加载完一列后数据自动填充到下一列”的效果
某考试 T1 arg
vijos 2035 奇数偶数与绚丽多彩的数
bzoj 5093: [Lydsy1711月赛]图的价值
[HEOI2016/TJOI2016]求和
[TJOI2015]概率论
Codeforces 616 E Sum of Remainders
原文地址:https://www.cnblogs.com/jjtx/p/2533506.html
最新文章
java scoket Blocking 阻塞IO socket通信三
java scoket Blocking 阻塞IO socket通信二
java scoket Blocking 阻塞IO socket通信一
disruptor架构四 多生产者多消费者执行
luogu3371 【模板】单源最短路径 dijkstra堆优化
luogu1262 间谍网络
luogu2951 noip2017 小凯的疑惑
2017年12月刷题学习日记
luogu2627 修剪草坪
luogu1725 琪露诺
热门文章
joyoi tyvj1313 [NOIP2010初赛]烽火传递
poj2823 Sliding Window luogu1886 滑动窗口 单调队列
hdu4825 Xor Sum
luogu2580 于是他错误的点名开始了 Trie树
经典SQL语句大全
SQL之50个常用的SQL语句
PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引
.NET ORM 的 “SOD蜜”--零基础入门篇
.NET面试题系列
对TCP说三道四
Copyright © 2020-2023
润新知