1. 程式人生 > >UVa-133-The Dole Queue

UVa-133-The Dole Queue


// 133 - The Dole Queue
#include <cstdio>
#include <cstdlib>

typedef struct node
{
	int num;
	struct node* pre;
	struct node* next;
}*ptr;

ptr creatnode(int elem)
{
	ptr temp;
	temp = (struct node*)malloc(sizeof(struct node));
	if(temp == NULL)
		exit(EXIT_FAILURE);
	temp->num = elem;
	temp->pre = NULL;
	temp->next = NULL;
	return temp;
}

void creatlist(ptr* x, ptr* y, int n)
{
	ptr head, temp;
	head = creatnode(1);
	temp = head;
	for(int i = 2; i <= n; i++)
	{
		temp->next = creatnode(i);
		temp->next->pre = temp;
		temp = temp->next;
	}
	temp->next = head;
	head->pre = temp;

	*x = head;
	*y = temp;
}

void deletenode(ptr t)
{
	ptr temp = t;
	temp->next->pre = t->pre;
	temp->pre->next = t->next;
	printf("%3d", t->num);
	free(t);
}

int main(void)
{
	int i, n, k, m, cnt;
	ptr x, y, x_t, y_t;
	while(scanf("%d%d%d", &n, &k, &m) && n)
	{
		cnt = 0;
		creatlist(&x, &y, n);

		while(cnt != n)
		{
			for(i = 1; i < k; i++)
				x = x->next;
			for(i = 1; i < m; i++)
				y = y->pre;

			if(x == y)
			{
				x_t = x->next;
				y_t = y->pre;
				deletenode(x);
				cnt++;
			}
			else if(x->next == y)
			{
				x_t = y->next;
				y_t = x->pre;
				deletenode(x);
				deletenode(y);
				cnt += 2;
			}
			else
			{
				x_t = x->next;
				y_t = y->pre;
				deletenode(x);
				deletenode(y);
				cnt += 2;
			}
			x = x_t;
			y = y_t;

			if(cnt != n)
				printf(",");
		}
		printf("\n");
	}
	return 0;
}


相關推薦

[UVa 133]The Dole Queue 救濟金發放

pos 逆時針 ica order first triple select mas data In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rh

【模擬】【環形陣列】-UVA-133- The Dole Queue

題目描述: 1~N個人站成圈,公務猿 A 從1 開始順時針查過 k 個人,公務猿 B 從N開始逆時針查過 m 個人,他倆查出的人出列(可以是重複的同一個人),把每次出列的人輸出來,直到佇列中木有人。 解題思路: 看完題就想起了之前例會上學長講的陣列模擬queue功能的方法

UVa 133 The Dole Queue(圈的下標處理)

本題難點在於用陣列處理圈狀物時下標的計算。 #include <cstdio> #include <string.h> using namespace std; cons

UVa-133-The Dole Queue

// 133 - The Dole Queue #include <cstdio> #include <cstdlib> typedef struct node { int num; struct node* pre; struct no

uvaoj 133 - The Dole Queue(邏輯,環形隊列數數)

its main ems color space col () span bit https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&

uvaoj 133 - The Dole Queue(邏輯,環形佇列數數)

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=69 有n個人向內排成一圈,從一個位置開始逆時針數k個,第k個出隊,從一個位置開始順時針數m

紫書——The Dole Queue UVA - 133

題解: 這道題目書上有題解,水題直接給出程式碼orz 主要是兩個人都會挑選,判斷好方向和次數就行(注意點:兩個挑選完後才判斷和刪除人,不要挑選一個就刪除一個)   #include <bits/stdc++.h> using namespace std;

救濟金髮放(The Dole QueueUVa 133

救濟金髮放 問題描述 n(n<20)個人站成一圈,逆時針編號為1~n。有兩個官員,A從1開始逆時針數,B從n開始順時針數。在每一輪中,官員A數k個就停下來,官員B數m個就停下來(注意有可能來兩個官員停在同一人上)。接下來被官員選中的人(1個或者2個)離

例題 4-3 救濟金髮放(The Dole QueueUVa 133

題目: 為了縮短領救濟品的隊伍,NNGLRP決定了以下策略:每天所有來申請救濟品的人會被放在一個大圓圈,面朝裡面。選定一個人為編號 1 號,其他的就從那個人開始逆時針開始編號直到 N。一個官員一開始逆

例題4-3 救濟金髮放(The Dole Queue, UVa 133)題解——23行程式碼

題目描述 題意解析 n(n<20)個人站成一圈,逆時針編號為1~n。有兩個官員,A從1開始逆時針數,B從n開始順時針數。在每一輪中,官員A數k個就停下來,官員B數m個就停下來(注意有可能兩個官員停在同一個人上)。接下來被官員選中的人(1個或者2個)離開

The Dole Queue(子過程設計)(UVa 133

In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoceros Party has decided on the following strategy. Every d

演算法競賽 例4-3救濟金髮放(The Dole Queue,UVa 133

n(n<20)個人站成一圈,逆時針編號為1~n。有兩個官員,A從1開始逆時針數,B從n開始順時針數。在每一輪中,官員A數k個就停下來,官員B數m個就停下來(注意有可能兩個官員停在同一個人上)

例題4-3 救濟金髮放(The Dole Queue, UVa 133

n(n<20)個人站成一圈,逆時針編號為1~n。有兩個官員,A從1開始逆時針數,B從n開 始順時針數。在每一輪中,官員A數k個就停下來,官員B數m個就停下來(注意有可能兩個 官員停在同一個人上)。接下來被官員選中的人(1個或者2個)離開隊伍。 輸入n,k,m輸出每輪裡被

演算法競賽入門經典(紫書)第四章—— The Dole Queue UVA-133

題意: 將 N 個數寫在一個環上,順時針數 k 個得到 x1,逆時針數 m 個得到 x2,將 x1 和 x2 輸出,如果相同則只輸出其中一個,輸出後將其從環上刪除。如此反覆。 思路: 將環想象

The Dole Queue UVA

演算法上那本紫書.. P8210%9是1   19%10就像是9%10 是9goto的思想..... ?其實不是很麻煩..  寫個函式好了然後就是一定要注意邊界... 還有比如p+d%n那個,一個是括號

(救濟金髮放)The Dole Queue(UVA

傳送門//迴圈佇列 #include<iostream> #include<cstdio> using namespace std; const int maxn=25; int n,k,m,a[maxn]; int go(int p,int

The Dole Queue【紫書例題4.3】

題意: n個人圍成個圓,從1到n,一個人從1數到k就讓第k個人離場,了另一個人從n開始數,數到m就讓第m個人下去,直到剩下最後一個人,並依次輸出離場人的序號。 水題,直接上標程了 #include<stdio.h> #define maxn 25 int n

UVa133 救濟金髮放 The Dole Queue

Description In a serious attempt to downsize (reduce) the dole queue, The New National Green Labour Rhinoceros Party has decided on the f

演算法競賽入門-救濟金髮放(The Dole Queue )

1、題目n(n<20)個人站成一圈,逆時針編號為1~n。有兩個官員,A從1開始逆時針數,B從n開始順時針數。在每一輪中,官員A數k個就停下來,官員B數m個就停下來(注意有可能兩個官員停在同一個人上)。接下來被官員選中的人(1個或者2個)離開隊伍。輸入n,k,m輸出每輪裡

The Dole Queue 約瑟夫環 模擬

A CM   Conte st Problems  Archive                                          Univers ity of Valladolid (SPAIN)  133      The    Dole     Queue  In a serious