#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
struct student
{
int num;
int payment;
};
queue <student> q;
int k,n;
struct Machine
{
int front_money;
int behind_money;
void convert();
void pay(student &s);
}machine;
void Machine::convert()
{
if(front_money==0)
{
behind_money=(behind_money++)%k+1;
front_money=behind_money;
}
}
void Machine::pay(student &s)//没有用引用类型,还是用cout发现的
{
if(front_money+s.payment>40)
{
front_money-=40-s.payment;
s.payment=40;
}
else
{
s.payment+=front_money;
front_money=0;
}
}
void initial()
{
for(int i=1;i<=n;i++)
{
student s;
s.payment=0;
s.num=i;
q.push(s);
}
machine.behind_money=0;
machine.front_money=0;
}
void start()
{
while(!q.empty())
{
machine.convert();
student s1=q.front();
machine.pay(s1);
q.pop();
if(s1.payment==40)
printf("%3d",s1.num);
else
q.push(s1);
}
}
int main()
{
while(scanf("%d%d",&n,&k) && !(n==0&&k==0))
{
initial();
start();
cout<<endl;
}
return 0;
}
这题是用面向对象做的