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;
}
这道题我用的是循环队列的思想但是写的不是循环队列 代码写得太搓了
有些步骤都是多余的
#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;
}
相关文章推荐
- 紫书章四例题3——UVA 133 TheDole Queue
- uva-133 - The Dole Queue
- UVa OJ The Dole Queue 救济金发放 133
- uva-133 The Dole Queue
- UVa 133 The Dole Queue (模拟循环链表)
- UVa - 133 - The Dole Queue(救济金发放)
- uva 133 The Dole Queue
- UVA133 The Dole Queue
- 算法竞赛入门经典(第2版)救济金发放(The Dole Queue,UVa133)
- 紫书章四例题3——UVA 133 TheDole Queue
- UVa 133 - The Dole Queue 数据结构专题
- UVA-133 The Dole Queue
- 【模拟】【环形数组】-UVA-133- The Dole Queue
- uva 133 The Dole Queue
- UVA - 133 The Dole Queue
- Uva 133 - The Dole Queue
- UVa 133 - The Dole Queue
- UVA 133 The Dole Queue
- 假期训练——The Dole Queue UVA - 133 模拟
- UVa - 133 The Dole Queue