[静态指针] 约瑟夫问题
2016-05-21 21:17
246 查看
题目描述
N个人(N不超过100的正整数)围成一圈,从第一个人开如报数,数到K的人出圈,再由下一个人开始报数,数到K的人出圈,......依次输出出圈人的编号。
样例输入
8 6
样例输出
6 4 3 5 8 7 2 1
本题考察了静态指针的基本操作。
#include<cmath>
#include<vector>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 100
using namespace std;
struct node{
int prev,next;
}q[MAXN+10];
int N,K;
int main(){
cin >> N >> K;
q[1].prev = N;q[1].next = 2;
q
.next = 1;q
.prev = N-1;
for(int i = 2; i < N; i++)
{
q[i].prev = i-1;
q[i].next = i+1;
}
int now = 1;
while (N--)
{
for (int i = 1; i < K; i++)
now = q[now].next;
cout << now << ' ';
q[q[now].prev].next = q[now].next;
q[q[now].next].prev = q[now].prev;
now = q[now].next;
}
return 0;
}
N个人(N不超过100的正整数)围成一圈,从第一个人开如报数,数到K的人出圈,再由下一个人开始报数,数到K的人出圈,......依次输出出圈人的编号。
样例输入
8 6
样例输出
6 4 3 5 8 7 2 1
本题考察了静态指针的基本操作。
#include<cmath>
#include<vector>
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 100
using namespace std;
struct node{
int prev,next;
}q[MAXN+10];
int N,K;
int main(){
cin >> N >> K;
q[1].prev = N;q[1].next = 2;
q
.next = 1;q
.prev = N-1;
for(int i = 2; i < N; i++)
{
q[i].prev = i-1;
q[i].next = i+1;
}
int now = 1;
while (N--)
{
for (int i = 1; i < K; i++)
now = q[now].next;
cout << now << ' ';
q[q[now].prev].next = q[now].next;
q[q[now].next].prev = q[now].prev;
now = q[now].next;
}
return 0;
}
相关文章推荐
- 计算机网络
- HDU 4717 三分
- 31. Next Permutation
- 根据节点解析xml
- zabbix3.0安装部署文档
- cf#352
- Light oj 1433 - Minimum Arc Distance【计算几何(坑精度!)】
- String , StringBuffer, StringBuilder的区别
- pl/sql loop循环
- core dump调试
- [转]7个高性能JavaScript代码高亮插件
- PJSIP的配置文件和字段
- HDU_5690_all X -- 百度程序之星的一个题目
- 任务栈 启动模式 Flag taskAffinity
- [转]7个高性能JavaScript代码高亮插件
- UVa 11988
- 套接字编程——基于TCP协议
- ML Pipelines
- Echarts 柱形图 时间横轴的动态生成和数据的动态生成
- github desktop(for Window)从本地上传项目到github