UVa1594,Ducii序列(队列)

用两个队列q1,q2来模拟操作过程。
输入n个数字,q1,q2的区别是,q1一开始就开始将数字入队,而q2是从第二个数字开始入队,最后队尾再加入第一个数字,后续模拟过程亦是如此。
代码如下:

#include<cstdio>
#include<iostream>
#include<queue>
#include<cmath> 
#include<algorithm>
using namespace std;
queue <int> q1,q2;
int n;
void print()
{
	int flag,cnt=1;
	while(1)
	{
		flag=0;cnt++;
		int a,b;
		for(int i=1;i<=n;i++)
		{
			a=q1.front();
			b=q2.front();
			a=(int)abs(a-b);
			if(a!=0)	flag=1;
			q1.pop(); q2.pop();
			q1.push(a);
			if(i>1)	q2.push(a);
		}
		a=q1.front();
		q2.push(a);
		if(!flag)
		{
			printf("ZERO\n");
			break;
		}
		if(cnt>1001)
		{
			printf("LOOP\n");
			break;
		}
	}
}
void clear()
{
	while(!q1.empty()) q1.pop();
	while(!q2.empty()) q2.pop();
}
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		int a;
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a);
			q1.push(a);
			if(i>1)	q2.push(a); 
		}
		a=q1.front();
		q2.push(a);
		print();
		clear(); 
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值