九度题目1188:约瑟夫环

简介:

题目1188:约瑟夫环
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:1500
解决:665
题目描述:
    N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的

人再从1、2、3开始报数,报p的人再退出圈外,以此类推。
    请按退出顺序输出每个退出人的原序号。

输入:
包括一个整数N(1<=N<=3000)及一个整数p。

输出:
测试数据可能有多组,对于每一组数据,
按退出顺序输出每个退出人的原序号。

样例输入:
7 3
样例输出:
3 6 2 7 5 1 4
来源:
2003-2005年华中科技大学计算机研究生机试真题

 

链表环模拟
AC代码:

#include<stdio.h>
struct Node
{
   int data;
   bool out;
   Node *next;
};
int main()
{
    int i,j,n,m,count;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
       Node *Head=new Node();
       Head->data=1;
       Head->out=false;
       Node *temp=Head;
       for(i=2;i<=n;i++)
       {
          Node *node=new Node();
          node->data=i;
          node->out=false;
          temp->next=node;
          temp=node;
       }
       temp->next=Head;//组成了一个链表环
       Node *p=Head;
       count=0;
       while(p&&n>0)
       {
          if(p->out==false)
          {
             count++;
             if(count==m)
             {
                if(n>1)
                   printf("%d ",p->data);
                 else
                   printf("%d\n",p->data);
                 p->out=true;
                 count=0;
                 n--;
             }
          }
          p=p->next;
       }
    }
    return 0;
}
相关文章
NowCoder | 环形链表的约瑟夫问题
NowCoder | 环形链表的约瑟夫问题
|
2月前
|
Perl
【每日一题】3.LeetCode——相交链表
【每日一题】3.LeetCode——相交链表
|
5月前
约瑟夫环问题的几种解法
约瑟夫环问题的几种解法
74 0
|
6月前
|
算法
约瑟夫环问题(三种方法)
约瑟夫环问题(三种方法)
92 0
蓝桥 发现环 (拓扑排序判环)
蓝桥 发现环 (拓扑排序判环)
|
10月前
|
算法 索引 Python
细究“约瑟夫环”
细究“约瑟夫环”
73 0
|
11月前
|
Java
洛谷(2947)向右看齐-单调栈-链表
单调栈对新手来说不好理解,但链表就特别简单,但在有时间限制的竞赛中,很容易超时,因此如果实在要使用链表,注意使用链表的类型,Java提供的两种实现链表的方式
|
11月前
约瑟夫环问题
使用queue<int>q记得加上头文件#include<queue>
54 0
|
C++ Python
约瑟夫环——公式法——附LeetCode—剑指offer题目—剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫环——公式法——附LeetCode—剑指offer题目—剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫环——公式法——附LeetCode—剑指offer题目—剑指 Offer 62. 圆圈中最后剩下的数字
约瑟夫环
题目: 已知n个人(以编号1,2,3--n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人有出列;以此规律重复下去,知道圆桌周围的人全部出列。输出出列顺序和最后剩下的人。
74 0