`
believexkx
  • 浏览: 21540 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

POJ 3629 Card Stacking

阅读更多
POJ 3629也是一个队列题,大意是N个人,K张牌(K是N的整数倍),发牌的人最后发给自己,为了防止发牌者把好牌发给自己,每发一个人便把牌往后挪P张。但每个人都想得到好牌,则设计个程序计算发牌者为了得到好牌应将好牌放到第几位,并按顺序输出。

http://poj.org/problem?id=3629

模拟此发牌过程的算法为:
import java.util.Scanner;
import java.util.Queue;
import java.util.LinkedList;
import java.util.Arrays;
public class Main 
{	
	public static void main(String[] args)
	{
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		int k=scan.nextInt();
		int p=scan.nextInt();
		
		Queue<Integer> q=new LinkedList<Integer>();
		//int b=q.peek();
		//向队列添加元素
		for(int i=0;i<k;i++)
		{
			q.offer(i+1);
		}	
		int[] arr=new int[k/n];
		int s=0;
		for(int w=1;w<=k/n;w++,s++)
		{
			for(int i=1;i<n;i++)
			{
				q.poll();
				for(int j=1;j<=p;j++)
				{
					q.offer(q.peek());//offer(E e)将指定的元素插入此队列
					q.poll();
				}
			}
			arr[s]=q.peek();
			
			q.poll();
			for(int j=1;j<=p;j++)
			{
				q.offer(q.peek());
				q.poll();
			}
		}
		Arrays.sort(arr);
		for(int i=0;i<arr.length;i++)
		{
			System.out.println(arr[i]);
		}
	}
}



模板类的解法:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	int queue[], head, tail;//记录队列,队列头和尾

	void enque(int x) {
		queue[tail] = x;
		tail++;
		if (tail == k)
			tail = 0;
	}
	int deque() {
		int ans = queue[head];
		head++;
		if (head == k)
			head = 0;
		return ans;
	}

	int n, m, k, p;
	int res[];
	Scanner scan = new Scanner(System.in);

        //队列初始化
	void init() {
		n = scan.nextInt();
		k = scan.nextInt();
		p = scan.nextInt();
		queue = new int[k];
		m = k / n;
		res = new int[m];
		for (int i = 1; i <= k; i++)
			enque(i);
	}

	void run() {
		init();

        //模拟发牌过程
		for (int x = 0; x< m; x++)
			for (int i = 1; i <= n; i++) {
				if (i == n)
					res[x] = deque();
				else
				    deque();
				for (int j = 0; j < p; j++)
					enque(deque());
			}
		Arrays.sort(res);
		for (int i = 0; i < m; i++)
			System.out.println(res[i]);
	}

	public static void main(String[] args)  {
		new Main().run();
	}
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics