1348 新约瑟夫
来源:互联网 发布:windows 驱动路径 编辑:程序博客网 时间:2024/04/30 02:49
约瑟夫最近不玩约瑟夫问题玩腻了……
他改了一下规则:有N个人围成一圈,从1号开始,报数,报1,2,1,2,1,2…一直报到第N个人,报到2的出列,剩下的人再从刚才最后一个报数的人开始报数(如果该人应该出列,则倒推到他前面第一个没有出列的人)1,2,3,1,2,3…报到2,3的人出列。然后继续,报数范围从开始的1,2报数,到后来得1,2,3…K报数,直到队伍中只有1个人。请问这个人的编号是多少?每轮每个人只报一次数,即如果该轮开始时人数不足K个人,则不必一定报数到K。
(要求:软件学院08级本周练习必须使用C风格链表,否则不记成绩)
- 输入
第一行包含一个整数T表示有T组数据。
每组数据包含一个整数N,表示有N个人。(N<=1000)
- 输出
对于每组数据按照题目描述要求输出最终剩余人的编号。
依然用链表来做
#include <iostream>using namespace std;typedef struct node {int data;struct node *next;}List;List* initial(int a){List* p,*q,*r=NULL;for (int i=1;i<=a;i++){p=new List;p->data=i;p->next=NULL;if (r==NULL) r=p;else q->next=p;q=p;}q->next=r;return r;}int main(){ int n; cin>>n; for (int i=0;i<n;i++) { int m; cin>>m; List *p=initial(m); int j=1; while (p->next!=p) {List *r=p;List *q=p;do{for (int k=0;k<=j;k++){r=r->next;if (r==q)break;}p->next=r;if (r!=q) p=r;}while (r!=q); j++; } cout<<p->data<<endl; } return 0; }
- 1348 新约瑟夫
- Uva133 约瑟夫圆环新解
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫
- 约瑟夫问题、约瑟夫环
- 约瑟夫算法
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 1345 军团训练营
- 高效整洁CSS代码原则 (上)
- 1346 Pig在哪里
- 1347 N阶魔方
- 飞信登录后出现runtime error 的解决方法
- 1348 新约瑟夫
- DirectX9 ShadowMap例子学习笔记
- 高效整洁CSS代码原则 (下)
- 1349 翻硬币游戏
- Synchronized块同步变量的误区
- linux 命令重定向
- 虚拟机IP地址设置问题
- Hibernate关联关系配置-----双向一对一映射配置
- 《C陷阱与缺陷》读书笔记4