您的位置:首页 > 产品设计 > UI/UE

UVa 133 The Dole Queue

2015-09-24 14:49 411 查看
解题思路:约瑟夫环。具体见代码:

#include<cstdio>
using namespace std;
int n, k, m, vis[24];   //24,向科比致敬,像科比一样努力的活着。

int go(int p, int d, int t)
{
while(t--)
{
do{
p = (p+d+n-1)%n + 1; //在纸上写写就知道
}while(vis[p]==0); //如果是0,则继续走,并且不计入步数。
}
return p; //返回走到的位置
}

int main()
{
while(~scanf("%d%d%d", &n, &k, &m) && n)
{
for(int i = 1; i <= n; i++) vis[i] = i;//初始化
int left = n, p1 = n, p2 = 1; //这里的初始化要注意
while(left)
{
p1 = go(p1, 1, k); //1表示逆时针
p2 = go(p2, -1, m); //-1表示顺时针
printf("%3d", vis[p1]);
left --;
if(p2 != p1)   //如果不同才输出
{
printf("%3d", vis[p2]);
left --;
}
vis[p1] = vis[p2] = 0; //标记为0,表示已走过
if(left) printf(","); //最后一个没有标点
}
printf("\n");
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: