UVa 144 - Student Grants

題目:有n個學生排隊取錢,取款機每次給的錢數是一個遞增序列,從1開始到k后又從1開始;

            如果學生取夠40元就離開,否則回到隊尾,如果給的錢加上學生手中的錢多餘40,

            剩下的錢給下一個人,請你輸出離開的序列編號。

分析:數據結構(DS),模擬。利用隊列模擬即可,注意如果剩下的錢沒被取走,就不會出新的錢。

說明:又是好長時間沒刷題╮(╯▽╰)╭。

#include <cstring>
#include <cstdio>

typedef struct _queue
{
	int id;
	int value;
	_queue(int I, int V) { id = I; value = V; }
	_queue(){}
}queue;
queue Q[1001],Temp;

int queue_head = 0;
int queue_tail = 0;

void queue_initial()
{
	queue_head = 0;
	queue_tail = 0;
	memset(Q, 0, sizeof(Q));
}

void queue_insert(queue a)
{
	Q[queue_tail ++] = a;
}

queue queue_delete()
{
	return Q[queue_head ++];
}

int main()
{
	int n, k;
	while (~scanf("%d%d",&n,&k) && n+k) {
		queue_initial();
		for (int i = 1; i <= n; ++ i)
			queue_insert(queue(i, 0));
		int value = 1,last = 1;
		while (n) {
			Temp = queue_delete();
			last = value;
			while (n && last+Temp.value >= 40) {
				last = last+Temp.value-40;
				printf("%3d",Temp.id);
				n --;
				if (last) Temp = queue_delete();
			}
			if (last) {
				Temp.value += last;
				queue_insert(Temp);
			}
			if(++ value > k)
				value = 1;
		}
		printf("\n");
	}
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值