九度題目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;
}
最後更新:2017-04-03 05:39:36