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

uva 133 - The Dole Queue

2013-08-16 09:24 501 查看
循环队列 :

这道题我用的是循环队列的思想但是写的不是循环队列    代码写得太搓了    

有些步骤都是多余的

#include<cstdio>
#include<cstring>
#include<algorithm>

int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif // LOCAL
int N,k,m,i,j;
while(scanf("%d%d%d",&N,&k,&m))
{
int T = N;
if(N == 0&&k == 0&& m ==0)break;
int num[N+2];
for(i = 0 ; i < N+2 ;i++)
num[i] = i;
num[N+1] = 0;
int sum = 0;
int f = 1,e =N;
int v_f, v_e;
int f_num,e_num;
while(sum < N)
{
v_f = v_e = 0;
for(i = f; ;i++)//从前往后找
{
if(i > N){i = 0;continue;}
if(num[i] == 0)continue;
v_f ++;
if(v_f >= k)break;
}
f_num = num[i];
for(j = e; ; j--)//从后往前找
{
if(j < 1){j = N+1;continue;}
if(num[j] == 0)continue;
v_e ++;
if(v_e >= m)break;
}
e_num = num[j];
num[e_num] = 0;
num[f_num] = 0;//标记已经被找过了
if(f_num != e_num)
{
T -= 2;
sum+=2;
printf("%3d%3d",f_num,e_num);
if(sum != N)printf(",");
}
else
{
T--;
sum++;
printf("%3d",f_num);
if(sum != N)printf(",");
}
i++;
if(i > N)i = 1;
while(num[i]==0&&T>0)
{
i++;
if(i > N)i = 1;
}
f = i;
j--;
if(j < 1)j = N;
while(num[j]==0&&T > 0)
{
j--;
if(j < 1)j = N;
}
e = j;
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构