标签:
題目:有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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/mobius_strip/article/details/46806939