九度oj 1188

来源:互联网 发布:淘宝主图ps无缝拼接 编辑:程序博客网 时间:2024/06/16 18:14
题目描述:

    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年华中科技大学计算机研究生机试真题

#include<iostream>#include<stdlib.h>using namespace std;typedef struct node{    int data;    node* next;}n;int main()    {//  freopen("c:\\11.txt","r",stdin);        int n,i,q;        while(cin>>n)        {            cin>>q;            node* head=(node*)malloc(sizeof(node));            head->data=1;            node* p=head;            for(i=2;i<=n;++i)            {                node* tmp=(node*)malloc(sizeof(node));                tmp->data=i;                p->next=tmp;                p=tmp;            }            p->next=head;            p=head;            int j=1;            int flag=1;            while(n)            {                if(p->data!=0)                {                        if(j==q)                    {       if(flag)                        {                            cout<<p->data;                            flag=0;                        }                        else cout<<" "<<p->data;                        j=0;                        n--;                        p->data=0;                    }                    j++;                    p=p->next;                }                else                    p=p->next;            }            cout<<endl;        }        return 0;    }


0 0