題目:有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;
}